第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

我看錯(cuò)了嗎?還是我理解有誤?

1、甲方(消息發(fā)送方,下同)構(gòu)建密鑰對(duì)(公鑰+私鑰),甲方公布公鑰給乙方(消息接收方,下同) 2、乙方以甲方發(fā)送過來的公鑰作為參數(shù)構(gòu)造密鑰對(duì)(公鑰+私鑰),將構(gòu)造出來的公鑰公布給甲方 3、甲方用“甲方的私鑰+乙方的公鑰”構(gòu)造本地密鑰 4、乙方用“乙方的私鑰+甲方的公鑰”構(gòu)造本地的密鑰 不應(yīng)該是這種方式嗎?但是我看老師的代碼,用的是甲方公鑰+甲方密鑰構(gòu)造本地的密鑰,乙方公鑰+乙方密鑰構(gòu)造本地的密鑰,是我看錯(cuò)了嗎???????

正在回答

2 回答

1.發(fā)送方構(gòu)建公鑰私鑰。

2.發(fā)送方發(fā)布發(fā)送方公鑰。

3.接收方接收發(fā)送方公鑰構(gòu)建接收方公鑰私鑰。

4.接收方發(fā)布接收方公鑰。

5.發(fā)送方通過發(fā)送方的私鑰和接收方的公鑰構(gòu)建對(duì)稱加密秘鑰用于加密。

6.接收方通過接收方的私鑰和發(fā)送方的公鑰構(gòu)建對(duì)稱加密秘鑰用于解密。

7.發(fā)送方通過秘鑰加密數(shù)據(jù)并發(fā)送。

8.接收方接收數(shù)據(jù)并通過秘鑰解密數(shù)據(jù)。

我稍微整理了下

public?static?void?jdkDHFlow()?throws?Exception?{
????//1.發(fā)送方構(gòu)建公鑰私鑰
????KeyPair?senderKeyPair?=?jdkSenderPublicKey();
????//2.發(fā)送方發(fā)布公鑰
????byte[]?senderPublicKeyEncode?=?senderKeyPair.getPublic().getEncoded();
????//3.接收方構(gòu)建公鑰私鑰->接收方通過發(fā)送方公鑰構(gòu)建公鑰私鑰
????KeyPair?receiverKeyPair?=?jdkreceiverPublicKey(senderPublicKeyEncode);
????//4.接收方發(fā)布公鑰
????byte[]?receiverPublicKeyEncode?=?receiverKeyPair.getPublic().getEncoded();
????//5.發(fā)送方構(gòu)建對(duì)稱加密的秘鑰->依據(jù)接收方公鑰和自己的公鑰私鑰構(gòu)建
????SecretKey?senderDesKey?=?jdkGetSecretKey(senderKeyPair,receiverPublicKeyEncode);
????//6.接收方構(gòu)建對(duì)稱加密秘鑰->依據(jù)發(fā)送方公鑰和接收方公鑰撕咬構(gòu)建
????SecretKey?receiverDesKey?=?jdkGetSecretKey(receiverKeyPair,senderPublicKeyEncode);
????//對(duì)比雙方對(duì)稱加密秘鑰是否安相同?查看是否測(cè)試成功
????if(Objects.equals(receiverDesKey,senderDesKey)){
????????System.out.println("雙方秘鑰相同");
????}
????//7.發(fā)送方加密
????Cipher?cipher?=?Cipher.getInstance("DES");
????cipher.init(Cipher.ENCRYPT_MODE,senderDesKey);
????byte[]?result?=?cipher.doFinal(BASE_STRING.getBytes());
????System.out.println("JDK?DH?加密:"+?Base64.encodeBase64String(result));
????//8.接收方解密
????cipher.init(Cipher.DECRYPT_MODE,receiverDesKey);
????result?=?cipher.doFinal(result);
????System.out.println("JDK?DH?解密:"+new?String(result));
}

/**
??*?發(fā)送方構(gòu)建發(fā)送方公鑰
??*?@return?構(gòu)建完成的公鑰
??*/
?public?static?KeyPair?jdkSenderPublicKey()?throws?NoSuchAlgorithmException?{
?????//1.初始化發(fā)送方秘鑰
?????KeyPairGenerator?senderKeyPairGenerator?=?KeyPairGenerator.getInstance("DH");
?????senderKeyPairGenerator.initialize(512);
?????//生成秘鑰
?????KeyPair?senderKeyPair?=?senderKeyPairGenerator.generateKeyPair();
?????return??senderKeyPair;
?}

?/**
??*?依據(jù)發(fā)送方公鑰生成接收方公鑰
??*?@param?senderPublicKey?發(fā)送方公鑰
??*?@return?接收方公鑰
??*/
?public?static?KeyPair?jdkreceiverPublicKey(byte[]?senderPublicKey)?throws?Exception?{
?????KeyFactory?receiverKeyFactory?=?KeyFactory.getInstance("DH");
?????X509EncodedKeySpec?x509EncodedKeySpec?=?new?X509EncodedKeySpec(senderPublicKey);
?????PublicKey?receiverPublicKey?=?receiverKeyFactory.generatePublic(x509EncodedKeySpec);
?????//使用和發(fā)送方一樣的參數(shù)初始化
?????DHParameterSpec?dhParameterSpec?=?((DHPublicKey)?receiverPublicKey).getParams();
?????KeyPairGenerator?receiverKeyPairGenerator?=?KeyPairGenerator.getInstance("DH");
?????//發(fā)送方公鑰解析出來的dhParameterSpec
?????receiverKeyPairGenerator.initialize(dhParameterSpec);
?????KeyPair?receiverKeyPair?=?receiverKeyPairGenerator.generateKeyPair();
?????return?receiverKeyPair;
?}

?/**
??*?自己的公鑰私鑰與對(duì)方的公鑰構(gòu)建?對(duì)稱秘鑰
??*?@param?keyPair?自己秘鑰對(duì)
??*?@param?publicKey?對(duì)方公鑰
??*?@return?本地對(duì)稱加密秘鑰
??*/
?public?static?SecretKey?jdkGetSecretKey(KeyPair?keyPair,byte[]?publicKey)?throws?Exception?{
?????KeyFactory?keyFactory?=?KeyFactory.getInstance("DH");
?????X509EncodedKeySpec?x509EncodedKeySpec?=?new?X509EncodedKeySpec(publicKey);
?????PublicKey?senderPublicKey?=?keyFactory.generatePublic(x509EncodedKeySpec);
?????KeyAgreement?keyAgreement?=?KeyAgreement.getInstance("DH");
?????keyAgreement.init(keyPair.getPrivate());
?????keyAgreement.doPhase(senderPublicKey,true);
?????SecretKey?secretKey?=?keyAgreement.generateSecret("DES");
?????return??secretKey;
?}


1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

_Alance

有幾個(gè)錯(cuò)別字不好意思啊。
2018-04-18 回復(fù) 有任何疑惑可以回復(fù)我~
#2

慕粉2333001784 提問者

非常感謝!
2018-05-19 回復(fù) 有任何疑惑可以回復(fù)我~

1.發(fā)送方構(gòu)建公鑰私鑰。

2.發(fā)送方發(fā)布發(fā)送方公鑰。

3.接收方接收發(fā)送方公鑰構(gòu)建接收方公鑰私鑰。

4.接收方發(fā)布接收方公鑰。

5.發(fā)送方通過發(fā)送方的私鑰和接收方的公鑰構(gòu)建對(duì)稱加密秘鑰用于加密。

6.接收方通過接收方的私鑰和發(fā)送方的公鑰構(gòu)建對(duì)稱加密秘鑰用于解密。

7.發(fā)送方通過秘鑰加密數(shù)據(jù)并發(fā)送。

8.接收方接收數(shù)據(jù)并通過秘鑰解密數(shù)據(jù)。

我稍微整理了下

public?static?void?jdkDHFlow()?throws?Exception?{
????//1.發(fā)送方構(gòu)建公鑰私鑰
????KeyPair?senderKeyPair?=?jdkSenderPublicKey();
????//2.發(fā)送方發(fā)布公鑰
????byte[]?senderPublicKeyEncode?=?senderKeyPair.getPublic().getEncoded();
????//3.接收方構(gòu)建公鑰私鑰->接收方通過發(fā)送方公鑰構(gòu)建公鑰私鑰
????KeyPair?receiverKeyPair?=?jdkreceiverPublicKey(senderPublicKeyEncode);
????//4.接收方發(fā)布公鑰
????byte[]?receiverPublicKeyEncode?=?receiverKeyPair.getPublic().getEncoded();
????//5.發(fā)送方構(gòu)建對(duì)稱加密的秘鑰->依據(jù)接收方公鑰和自己的公鑰私鑰構(gòu)建
????SecretKey?senderDesKey?=?jdkGetSecretKey(senderKeyPair,receiverPublicKeyEncode);
????//6.接收方構(gòu)建對(duì)稱加密秘鑰->依據(jù)發(fā)送方公鑰和接收方公鑰撕咬構(gòu)建
????SecretKey?receiverDesKey?=?jdkGetSecretKey(receiverKeyPair,senderPublicKeyEncode);
????//對(duì)比雙方對(duì)稱加密秘鑰是否安相同?查看是否測(cè)試成功
????if(Objects.equals(receiverDesKey,senderDesKey)){
????????System.out.println("雙方秘鑰相同");
????}
????//7.發(fā)送方加密
????Cipher?cipher?=?Cipher.getInstance("DES");
????cipher.init(Cipher.ENCRYPT_MODE,senderDesKey);
????byte[]?result?=?cipher.doFinal(BASE_STRING.getBytes());
????System.out.println("JDK?DH?加密:"+?Base64.encodeBase64String(result));
????//8.接收方解密
????cipher.init(Cipher.DECRYPT_MODE,receiverDesKey);
????result?=?cipher.doFinal(result);
????System.out.println("JDK?DH?解密:"+new?String(result));
}

/**
??*?發(fā)送方構(gòu)建發(fā)送方公鑰
??*?@return?構(gòu)建完成的公鑰
??*/
?public?static?KeyPair?jdkSenderPublicKey()?throws?NoSuchAlgorithmException?{
?????//1.初始化發(fā)送方秘鑰
?????KeyPairGenerator?senderKeyPairGenerator?=?KeyPairGenerator.getInstance("DH");
?????senderKeyPairGenerator.initialize(512);
?????//生成秘鑰
?????KeyPair?senderKeyPair?=?senderKeyPairGenerator.generateKeyPair();
?????return??senderKeyPair;
?}

?/**
??*?依據(jù)發(fā)送方公鑰生成接收方公鑰
??*?@param?senderPublicKey?發(fā)送方公鑰
??*?@return?接收方公鑰
??*/
?public?static?KeyPair?jdkreceiverPublicKey(byte[]?senderPublicKey)?throws?Exception?{
?????KeyFactory?receiverKeyFactory?=?KeyFactory.getInstance("DH");
?????X509EncodedKeySpec?x509EncodedKeySpec?=?new?X509EncodedKeySpec(senderPublicKey);
?????PublicKey?receiverPublicKey?=?receiverKeyFactory.generatePublic(x509EncodedKeySpec);
?????//使用和發(fā)送方一樣的參數(shù)初始化
?????DHParameterSpec?dhParameterSpec?=?((DHPublicKey)?receiverPublicKey).getParams();
?????KeyPairGenerator?receiverKeyPairGenerator?=?KeyPairGenerator.getInstance("DH");
?????//發(fā)送方公鑰解析出來的dhParameterSpec
?????receiverKeyPairGenerator.initialize(dhParameterSpec);
?????KeyPair?receiverKeyPair?=?receiverKeyPairGenerator.generateKeyPair();
?????return?receiverKeyPair;
?}

?/**
??*?自己的公鑰私鑰與對(duì)方的公鑰構(gòu)建?對(duì)稱秘鑰
??*?@param?keyPair?自己秘鑰對(duì)
??*?@param?publicKey?對(duì)方公鑰
??*?@return?本地對(duì)稱加密秘鑰
??*/
?public?static?SecretKey?jdkGetSecretKey(KeyPair?keyPair,byte[]?publicKey)?throws?Exception?{
?????KeyFactory?keyFactory?=?KeyFactory.getInstance("DH");
?????X509EncodedKeySpec?x509EncodedKeySpec?=?new?X509EncodedKeySpec(publicKey);
?????PublicKey?senderPublicKey?=?keyFactory.generatePublic(x509EncodedKeySpec);
?????KeyAgreement?keyAgreement?=?KeyAgreement.getInstance("DH");
?????keyAgreement.init(keyPair.getPrivate());
?????keyAgreement.doPhase(senderPublicKey,true);
?????SecretKey?secretKey?=?keyAgreement.generateSecret("DES");
?????return??secretKey;
?}


1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

飛天MoMo

感謝總結(jié),學(xué)習(xí)到了。只是有個(gè)小失誤,方法jdkGetSecretKey中前三行多余了。
2018-07-06 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
JAVA實(shí)現(xiàn)非對(duì)稱加密
  • 參與學(xué)習(xí)       27495    人
  • 解答問題       37    個(gè)

非對(duì)稱加密算法在JAVA中的實(shí)現(xiàn),了解非對(duì)稱加密算法應(yīng)用場(chǎng)景

進(jìn)入課程

我看錯(cuò)了嗎?還是我理解有誤?

我要回答 關(guān)注問題
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)