資訊加密之非對稱加密DH演算法

2022-07-04 23:00:19 字數 2658 閱讀 9230

非對稱加密演算法是相對於對稱加密演算法來說的,對於對稱加密演算法請查閱之前的總結,今天為大家介紹一下dh演算法,dh是一種金鑰交換演算法,接收方根據傳送方加密時的金鑰,生成接收方解密金鑰。下面就一起來學習一下吧:

初始化傳送方金鑰:

keypairgenerator sendkeypairgenerator = keypairgenerator.getinstance("dh");

sendkeypairgenerator.initialize(512);

keypair sendkeypair =sendkeypairgenerator.generatekeypair();

byte sendpublickeyenc = sendkeypair.getpublic().getencoded();//

生成傳送方公鑰,傳送給接收方(網路、檔案...)

初始化接收方金鑰:

keyfactory receiverkeyfactory = keyfactory.getinstance("dh");

x509encodedkeyspec x509encodedkeyspec = new

x509encodedkeyspec(sendpublickeyenc);

publickey receivepublickey =receiverkeyfactory.generatepublic(x509encodedkeyspec);

dhparameterspec dhparameterspec =((dhpublickey)receivepublickey).getparams();

keypairgenerator receiverkeypairgenerator = keypairgenerator.getinstance("dh");

receiverkeypairgenerator.initialize(dhparameterspec);

keypair receiverkeypair =receiverkeypairgenerator.generatekeypair();

privatekey receiverprivatekey =receiverkeypair.getprivate();

byte receiverpublickeyenc = receiverkeypair.getpublic().getencoded();

構建接收方金鑰:

keyagreement receiverkeyagreement = keyagreement.getinstance("dh");

receiverkeyagreement.init(receiverprivatekey);

receiverkeyagreement.dophase(receivepublickey,

true

);

secretkey receiverdeskey = receiverkeyagreement.generatesecret("des");//

接收方key

構建傳送方金鑰:

keyfactory sendkeyfactory = keyfactory.getinstance("dh");

x509encodedkeyspec = new

x509encodedkeyspec(receiverpublickeyenc);

publickey sendpublickey =sendkeyfactory.generatepublic(x509encodedkeyspec);

keyagreement sendkeyagreement = keyagreement.getinstance("dh");

sendkeyagreement.init(sendkeypair.getprivate());

sendkeyagreement.dophase(sendpublickey,

true

);

secretkey senddeskey = sendkeyagreement.generatesecret("des");//

傳送方key

傳送方加密:

cipher sendcipher = cipher.getinstance("des");

sendcipher.init(cipher.encrypt_mode, senddeskey);

byte sendresult =sendcipher.dofinal(src.getbytes());

system.out.println("sendresult :"+hex.encodehexstring(sendresult));

接收方解密:

cipher receivercipher = cipher.getinstance("des");

receivercipher.init(cipher.decrypt_mode, receiverdeskey);

byte receiverresult =receivercipher.dofinal(sendresult);

system.out.println("receiverresult : "+new string (receiverresult));

基於金鑰交換的非對稱加密演算法(dh),到這裡就總結完畢了。

非對稱加密演算法 DH

11.1 非對稱加密演算法 特點 常見演算法 11.2 dh 僅能用於金鑰分配,不能加解密資料 實現方式 幾個概念 整個流程 1 甲乙雙方初始化各自的金鑰對 甲方構建出金鑰對keypair1 乙方使用甲方的金鑰對中的公鑰publickey1構建出自己的金鑰對keypair2 2 甲乙雙方構建各自的本...

DH金鑰交換非對稱加密

迪菲 赫爾曼金鑰交換 diffie hellman key exchange,簡稱 d h 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。1 演算法描述 離散對數的概念 原根 如果a是素數p 的乙個原...

DH金鑰交換非對稱加密

迪菲 赫爾曼金鑰交換 diffie hellman key exchange,簡稱 d h 是一種安全協議。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全通道建立起乙個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。1 演算法描述 離散對數的概念 原根 如果a是素數p 的乙個原...