欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA加密算法實(shí)密鑰一致協(xié)議代碼示例

 更新時(shí)間:2020年10月20日 09:57:41   作者:cuisuqiang  
這篇文章主要介紹了JAVA加密算法實(shí)密鑰一致協(xié)議代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

密鑰一致協(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)));
	}
}

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

相關(guān)文章

  • IntelliJ?IDEA如何集成maven

    IntelliJ?IDEA如何集成maven

    這篇文章主要介紹了IntelliJ?IDEA如何集成maven問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java字符串常量池示例詳解

    Java字符串常量池示例詳解

    作為最基礎(chǔ)的引用數(shù)據(jù)類(lèi)型,Java設(shè)計(jì)者為 String 提供了字符串常量池以提高其性能,下面這篇文章主要給大家介紹了關(guān)于Java字符串常量池的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java中JMM與volatile關(guān)鍵字的學(xué)習(xí)

    Java中JMM與volatile關(guān)鍵字的學(xué)習(xí)

    這篇文章主要介紹了通過(guò)實(shí)例解析JMM和Volatile關(guān)鍵字的學(xué)習(xí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • MyBatis超詳細(xì)講解如何實(shí)現(xiàn)分頁(yè)功能

    MyBatis超詳細(xì)講解如何實(shí)現(xiàn)分頁(yè)功能

    MyBatis-Plus?是一個(gè)?Mybatis?增強(qiáng)版工具,在?MyBatis?上擴(kuò)充了其他功能沒(méi)有改變其基本功能,為了簡(jiǎn)化開(kāi)發(fā)提交效率而存在,本篇文章帶用它實(shí)現(xiàn)分頁(yè)功能
    2022-03-03
  • MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名

    MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名

    這篇文章主要介紹了MyBatis-Plus中如何實(shí)現(xiàn)動(dòng)態(tài)表名問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案

    springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案

    這篇文章主要介紹了springboot基于Redis發(fā)布訂閱集群下WebSocket的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 解析Java異步之call future

    解析Java異步之call future

    當(dāng)調(diào)用一個(gè)函數(shù)的時(shí)候,如果這個(gè)函數(shù)的執(zhí)行過(guò)程是很耗時(shí)的,就必須要等待,但是有時(shí)候并不急著要這個(gè)函數(shù)返回的結(jié)果。因此,可以讓被調(diào)者立即返回,讓他在后臺(tái)慢慢處理這個(gè)請(qǐng)求。對(duì)于調(diào)用者來(lái)說(shuō),可以先處理一些其他事情,在真正需要數(shù)據(jù)的時(shí)候再去嘗試獲得需要的數(shù)據(jù)
    2021-06-06
  • Java使用Google Zxing生成二維碼的例子

    Java使用Google Zxing生成二維碼的例子

    本篇文章主要介紹了Java使用Google Zxing生成二維碼的例子。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • mybatis+springboot發(fā)布postgresql數(shù)據(jù)的實(shí)現(xiàn)

    mybatis+springboot發(fā)布postgresql數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了mybatis+springboot發(fā)布postgresql數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Java中常用的設(shè)計(jì)模式之策略模式詳解

    Java中常用的設(shè)計(jì)模式之策略模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java中常用的設(shè)計(jì)模式之策略模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02

最新評(píng)論