您好,登錄后才能下訂單哦!
本篇文章為大家展示了JAVA加密算法實(shí)現(xiàn)密鑰一致協(xié)議,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
密鑰一致協(xié)議是由公開(kāi)密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的一種思想。
代表:指數(shù)密鑰一致協(xié)議 (Exponential Key Agreement Protocol)
使用流程介紹:
甲方構(gòu)建密鑰對(duì),將公鑰公布給乙方,將私鑰保留;雙方約定數(shù)據(jù)加密算法;乙方通過(guò)甲方公鑰構(gòu)建密鑰對(duì),將公鑰公布給甲方,將私鑰保留。
甲方使用私鑰、乙方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過(guò)本地密鑰加密數(shù)據(jù),發(fā)送給乙方加密后的數(shù)據(jù);乙方使用私鑰、甲方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過(guò)本地密鑰對(duì)數(shù)據(jù)解密。
乙方使用私鑰、甲方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過(guò)本地密鑰加密數(shù)據(jù),發(fā)送給甲方加密后的數(shù)據(jù);甲方使用私鑰、乙方公鑰、約定數(shù)據(jù)加密算法構(gòu)建本地密鑰,然后通過(guò)本地密鑰對(duì)數(shù)據(jù)解密。
不單單是甲乙雙方兩方,可以擴(kuò)展為多方共享數(shù)據(jù)通訊,這樣就完成了網(wǎng)絡(luò)交互數(shù)據(jù)的安全通訊!
參考示例:
package test; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PublicKey; import java.security.Security; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; public class DHKey { public static void main(String argv[]) { try { DHKey my = new DHKey(); my.run(); } catch (Exception e) { System.err.println(e); } } private void run() throws Exception { // A 構(gòu)建密鑰對(duì),公鑰給B Security.addProvider(new com.sun.crypto.provider.SunJCE()); KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH"); aliceKpairGen.initialize(512); KeyPair aliceKpair = aliceKpairGen.generateKeyPair(); byte[] alicePubKeyEnc = aliceKpair.getPublic().getEncoded(); // 公開(kāi)密鑰 // B 根據(jù)A的公鑰構(gòu)建自己的密鑰對(duì),同時(shí)把自己生成的公鑰給A,通過(guò)A的公鑰和自己的私鑰構(gòu)建DES的密鑰 KeyFactory bobKeyFac = KeyFactory.getInstance("DH"); X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(alicePubKeyEnc); PublicKey alicePubKey = bobKeyFac.generatePublic(x509KeySpec); DHParameterSpec dhParamSpec = ((DHPublicKey) alicePubKey).getParams(); KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("DH"); bobKpairGen.initialize(dhParamSpec); KeyPair bobKpair = bobKpairGen.generateKeyPair(); KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH"); bobKeyAgree.init(bobKpair.getPrivate()); bobKeyAgree.doPhase(alicePubKey, true); SecretKey bobDesKey = bobKeyAgree.generateSecret("DES"); byte[] bobPubKeyEnc = bobKpair.getPublic().getEncoded(); // A 通過(guò)本地密鑰和A的公鑰構(gòu)建DES密鑰,這里還做一個(gè)驗(yàn)證 KeyFactory aliceKeyFac = KeyFactory.getInstance("DH"); x509KeySpec = new X509EncodedKeySpec(bobPubKeyEnc); PublicKey bobPubKey = aliceKeyFac.generatePublic(x509KeySpec); KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH"); aliceKeyAgree.init(aliceKpair.getPrivate()); // 秘密密鑰 aliceKeyAgree.doPhase(bobPubKey, true); SecretKey aliceDesKey = aliceKeyAgree.generateSecret("DES"); if (aliceDesKey.equals(bobDesKey)) System.out.println("A 和 B 的公鑰 相同"); else System.out.println("A 和 B 的公鑰 不同"); // B 通過(guò)密鑰加密數(shù)據(jù) Cipher bobCipher = Cipher.getInstance("DES"); bobCipher.init(Cipher.ENCRYPT_MODE, bobDesKey); String bobinfo = "這是B的機(jī)密信息"; System.out.println("B 加密前原文 :" + bobinfo); byte[] cleartext = bobinfo.getBytes(); byte[] ciphertext = bobCipher.doFinal(cleartext); // A 通過(guò)密鑰解密數(shù)據(jù) Cipher aliceCipher = Cipher.getInstance("DES"); aliceCipher.init(Cipher.DECRYPT_MODE, aliceDesKey); byte[] recovered = aliceCipher.doFinal(ciphertext); System.out.println("A解密 B 的信息 :" + (new String(recovered))); } }
上述內(nèi)容就是JAVA加密算法實(shí)現(xiàn)密鑰一致協(xié)議,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。