亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JAVA加密算法數(shù)字簽名實(shí)現(xiàn)原理詳解

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

所謂數(shù)字簽名就是信息發(fā)送者用其私鑰對(duì)從所傳報(bào)文中提取出的特征數(shù)據(jù)(或稱數(shù)字指紋)進(jìn)行 RSA 算法操作,以保證發(fā)信人無(wú)法抵賴曾發(fā)過(guò)該信息(即不可抵賴性),同時(shí)也確保信息報(bào)文在經(jīng)簽名后末被篡改(即完整性)。當(dāng)信息接收者收到報(bào)文后,就可以用發(fā)送者的公鑰對(duì)數(shù)字簽名進(jìn)行驗(yàn)證。

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

1:接受的輸入報(bào)文數(shù)據(jù)沒(méi)有長(zhǎng)度限制;

2:對(duì)任何輸入報(bào)文數(shù)據(jù)生成固定長(zhǎng)度的摘要(數(shù)字指紋)輸出

3:從報(bào)文能方便地算出摘要;

4:難以對(duì)指定的摘要生成一個(gè)報(bào)文,而由該報(bào)文反推算出該指定的摘要;

5:兩個(gè)不同的報(bào)文難以生成相同的摘要

代表: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() {// 數(shù)字簽名生成密鑰// 第一步生成密鑰對(duì),如果已經(jīng)生成過(guò) , 本過(guò)程就可以跳過(guò)// 對(duì)用戶來(lái)講 myprikey.dat 要保存在本地,而 mypubkey.dat 給發(fā)布給其它用戶if ((new java.io.File('myprikey.dat')).exists() == false) {if (generatekey() == false) {System.out.println('生成密鑰對(duì)敗');return;}}// 第二步 , 此用戶// 從文件中讀入私鑰 , 對(duì)一個(gè)字符串進(jìn)行簽名后保存在一個(gè)文件 (myinfo.dat) 中// 并且再把 myinfo.dat 發(fā)送出去,為了方便數(shù)字簽名也放進(jìn)了 myifno.dat 文件中 , 當(dāng)然也可分別發(fā)送try {ObjectInputStream in = new ObjectInputStream(new FileInputStream('myprikey.dat'));PrivateKey myprikey = (PrivateKey) in.readObject();in.close();String myinfo = '這是我的信息'; // 要簽名的信息// 用私鑰對(duì)信息生成數(shù)字簽名Signature signet = Signature.getInstance('DSA');signet.initSign(myprikey);signet.update(myinfo.getBytes());byte[] signed = signet.sign(); // 對(duì)信息的數(shù)字簽名System.out.println('signed( 簽名內(nèi)容 )=' + byte2hex(signed));// 把信息和數(shù)字簽名保存在一個(gè)文件中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('簽名并生成文件失敗');}// 第三步 獲得信息檢查// 其他人通過(guò)公共方式得到此戶的公鑰和文件// 其他人用此戶的公鑰 , 對(duì)文件進(jìn)行檢查 , 如果成功說(shuō)明是此用戶發(fā)布的信息 .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();};}// 生成一對(duì)文件 myprikey.dat 和 mypubkey.dat 私鑰和公鑰// 公鑰要用戶發(fā)送 ( 文件 , 網(wǎng)絡(luò)等方法 ) 給其它用戶 , 私鑰保存在本地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('寫入對(duì)象 prikeys ok');out = new ObjectOutputStream(new FileOutputStream('mypubkey.dat'));out.writeObject(pubkey);out.close();System.out.println('寫入對(duì)象 pubkeys ok');System.out.println('生成密鑰對(duì)成功');return true;} catch (java.lang.Exception e) {e.printStackTrace();System.out.println('生成密鑰對(duì)失敗');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();}}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 国产h视频 | 欧美黄色a | 亚久久伊人精品青青草原2020 | 麻豆精品免费视频入口 | 99视频精品全部国产盗摄视频 | 美女拍拍拍爽爽爽爽爽爽 | 欧美一级三级 | 精品三级久久久久久久电影 | 悠悠资源先锋中文站 | 午夜男男xx00视频免费 | 国产偷窥自拍视频 | 欧美综合图片一区二区三区 | 一级黄色片大全 | 亚洲综合精品香蕉久久网 | 久久澳门 | 免费a视频在线观看 | 在线视频一区二区三区四区 | 韩国一级黄色录像 | 日本xxwwwxxxx网站 | 国产高跟丝袜 | 久久国产精品佐山爱 | 成人精品免费视频 | 亚洲国产成人精品一区二区三区 | 日韩中文字幕在线 | 成人精品福利 | 欧美黄色软件 | 俺去啦网婷婷 | 南京巨根无套操到你窒息 | 你懂的网站在线 | 999精品视频 | 亚洲色图欧美在线 | 久久国产免费一区 | 国产又色又爽又黄又刺激18 | 视频一区二区国产 | 好看的毛片 | 亚洲性综合网 | 樱花aⅴ一区二区三区四区 樱花草在线社区www韩国 | 国产精品白浆精子流水合集 | 怡红院免费va男人的天堂 | 26uuu天天夜夜综合 | 美国一级黄色片 |