色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

JAVA加密算法數字簽名實現原理詳解

瀏覽:37日期:2022-08-22 13:24:28

所謂數字簽名就是信息發送者用其私鑰對從所傳報文中提取出的特征數據(或稱數字指紋)進行 RSA 算法操作,以保證發信人無法抵賴曾發過該信息(即不可抵賴性),同時也確保信息報文在經簽名后末被篡改(即完整性)。當信息接收者收到報文后,就可以用發送者的公鑰對數字簽名進行驗證。

在數字簽名中有重要作用的數字指紋是通過一類特殊的散列函數(HASH 函數)生成的,對這些 HASH 函數的特殊要求是:

1:接受的輸入報文數據沒有長度限制;

2:對任何輸入報文數據生成固定長度的摘要(數字指紋)輸出

3:從報文能方便地算出摘要;

4:難以對指定的摘要生成一個報文,而由該報文反推算出該指定的摘要;

5:兩個不同的報文難以生成相同的摘要

代表:DSA

代碼如下

package test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;public class DSA {public static void main(String[] args) {try {DSA my = new DSA();my.run();} catch (Exception e) {e.printStackTrace();}}public void run() {// 數字簽名生成密鑰// 第一步生成密鑰對,如果已經生成過 , 本過程就可以跳過// 對用戶來講 myprikey.dat 要保存在本地,而 mypubkey.dat 給發布給其它用戶if ((new java.io.File('myprikey.dat')).exists() == false) {if (generatekey() == false) {System.out.println('生成密鑰對敗');return;}}// 第二步 , 此用戶// 從文件中讀入私鑰 , 對一個字符串進行簽名后保存在一個文件 (myinfo.dat) 中// 并且再把 myinfo.dat 發送出去,為了方便數字簽名也放進了 myifno.dat 文件中 , 當然也可分別發送try {ObjectInputStream in = new ObjectInputStream(new FileInputStream('myprikey.dat'));PrivateKey myprikey = (PrivateKey) in.readObject();in.close();String myinfo = '這是我的信息'; // 要簽名的信息// 用私鑰對信息生成數字簽名Signature signet = Signature.getInstance('DSA');signet.initSign(myprikey);signet.update(myinfo.getBytes());byte[] signed = signet.sign(); // 對信息的數字簽名System.out.println('signed( 簽名內容 )=' + byte2hex(signed));// 把信息和數字簽名保存在一個文件中ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream('myinfo.dat'));out.writeObject(myinfo);out.writeObject(signed);out.close();System.out.println('簽名并生成文件成功');} catch (java.lang.Exception e) {e.printStackTrace();System.out.println('簽名并生成文件失敗');}// 第三步 獲得信息檢查// 其他人通過公共方式得到此戶的公鑰和文件// 其他人用此戶的公鑰 , 對文件進行檢查 , 如果成功說明是此用戶發布的信息 .try {ObjectInputStream in = new ObjectInputStream(new FileInputStream('mypubkey.dat'));PublicKey pubkey = (PublicKey) in.readObject();in.close();System.out.println(pubkey.getFormat());in = new ObjectInputStream(new FileInputStream('myinfo.dat'));String info = (String) in.readObject();byte[] signed = (byte[]) in.readObject();in.close();Signature signetcheck = Signature.getInstance('DSA');signetcheck.initVerify(pubkey);signetcheck.update(info.getBytes());if (signetcheck.verify(signed)) {System.out.println('info=' + info);System.out.println('簽名正常');} elseSystem.out.println('非簽名正常');} catch (java.lang.Exception e) {e.printStackTrace();};}// 生成一對文件 myprikey.dat 和 mypubkey.dat 私鑰和公鑰// 公鑰要用戶發送 ( 文件 , 網絡等方法 ) 給其它用戶 , 私鑰保存在本地public boolean generatekey() {try {KeyPairGenerator keygen = KeyPairGenerator.getInstance('DSA');keygen.initialize(512);KeyPair keys = keygen.genKeyPair();PublicKey pubkey = keys.getPublic();PrivateKey prikey = keys.getPrivate();ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream('myprikey.dat'));out.writeObject(prikey);out.close();System.out.println('寫入對象 prikeys ok');out = new ObjectOutputStream(new FileOutputStream('mypubkey.dat'));out.writeObject(pubkey);out.close();System.out.println('寫入對象 pubkeys ok');System.out.println('生成密鑰對成功');return true;} catch (java.lang.Exception e) {e.printStackTrace();System.out.println('生成密鑰對失敗');return false;}}public String byte2hex(byte[] b) {String hs = '';String stmp = '';for (int n = 0; n < b.length; n++) {stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));if (stmp.length() == 1)hs = hs + '0' + stmp;elsehs = hs + stmp;if (n < b.length - 1)hs = hs + ':';}return hs.toUpperCase();}}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 午夜免费一级片 | 欧美真人视频一级毛片 | 亚洲欧美一区二区三区四区 | 欧美成人性动漫在线观看 | 成人免费观看永久24小时 | 日本三级中文字幕 | 丝袜美腿在线不卡视频播放 | 亚洲成人美女 | 欧美日韩 国产区 在线观看 | 日本红怡院亚洲红怡院最新 | 男女牲高爱潮免费视频男女 | 99热热久久这里只有精品166 | 成人欧美在线 | 欧美精品一区二区精品久久 | 久久国产精品久久精品国产 | 中日韩欧美一级毛片 | 亚洲福利国产精品17p | 亚洲精品久久久久中文 | 中国美女一级黄色片 | 色老头一区二区三区在线观看 | 成人精品 | 玖玖玖精品视频免费播放 | 99国产精品欧美久久久久久影院 | 欧美videos娇小| 日韩欧美一区二区三区不卡视频 | 亚洲手机看片 | 成人男女18免费o | 亚洲综合综合在线 | 国产伦码精品一区二区 | 日本一级~片免费永久 | a级午夜毛片免费一区二区 a级性生活视频 | fefe66免费毛片你懂的 | 91欧美在线视频 | 国产美女视频黄a视频全免费网站 | 一级毛片在线观看视频 | 国产激情久久久久久影院 | 国产一级一片免费播放刺激 | 国产精品亚洲四区在线观看 | 国产精品无码久久久久 | 国产成人久久精品二区三区 | 长腿嫩模打开双腿呻吟 |