java 非對(duì)稱(chēng)加密算法DH實(shí)現(xiàn)詳解
非對(duì)稱(chēng)加密算法是相對(duì)于對(duì)稱(chēng)加密算法來(lái)說(shuō)的,對(duì)于對(duì)稱(chēng)加密算法請(qǐng)查閱之前的總結(jié),今天為大家介紹一下DH算法,DH是一種密鑰交換算法,接收方根據(jù)發(fā)送方加密時(shí)的密鑰,生成接收方解密密鑰。下面就一起來(lái)學(xué)習(xí)一下吧:
初始化發(fā)送方密鑰:
KeyPairGenerator sendKeyPairGenerator = KeyPairGenerator.getInstance("DH");
sendKeyPairGenerator.initialize(512);
KeyPair sendKeyPair = sendKeyPairGenerator.generateKeyPair();
byte[] sendPublicKeyEnc = sendKeyPair.getPublic().getEncoded();//生成發(fā)送方公鑰,發(fā)送給接收方(網(wǎng)絡(luò)、文件...)
初始化接收方密鑰:
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();
構(gòu)建接收方密鑰:
KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");
receiverKeyAgreement.init(receiverPrivateKey);
receiverKeyAgreement.doPhase(receivePublicKey, true);
SecretKey receiverDESKey = receiverKeyAgreement.generateSecret("DES");//接收方Key
構(gòu)建發(fā)送方密鑰:
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");//發(fā)送方Key
發(fā)送方加密:
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));
基于密鑰交換的非對(duì)稱(chēng)加密算法(DH),到這里就總結(jié)完畢了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JAVA加密算法- 非對(duì)稱(chēng)加密算法(DH,RSA)的詳細(xì)介紹
- Java編程實(shí)現(xiàn)非對(duì)稱(chēng)加密的方法詳解
- java 非對(duì)稱(chēng)加密算法RSA實(shí)現(xiàn)詳解
- 解決JAVA非對(duì)稱(chēng)加密不同系統(tǒng)加密結(jié)果不一致的問(wèn)題
- Java 實(shí)現(xiàn)常見(jiàn)的非對(duì)稱(chēng)加密算法
- 教你用Java實(shí)現(xiàn)RSA非對(duì)稱(chēng)加密算法
- Java 實(shí)現(xiàn)RSA非對(duì)稱(chēng)加密算法
- Java對(duì)稱(chēng)與非對(duì)稱(chēng)加密算法原理詳細(xì)講解
- 淺析Java中對(duì)稱(chēng)與非對(duì)稱(chēng)加密算法原理與使用
- Java實(shí)現(xiàn)非對(duì)稱(chēng)加密的三種方法
相關(guān)文章
Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法
這篇文章給大家介紹Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-07-07
Java之System.getProperty()的作用及使用說(shuō)明
這篇文章主要介紹了Java之System.getProperty()的作用及使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Java注解@Transactional事務(wù)類(lèi)內(nèi)調(diào)用不生效問(wèn)題及解決辦法
這篇文章主要介紹了Java注解@Transactional事務(wù)類(lèi)內(nèi)調(diào)用不生效問(wèn)題及解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
springboot使用EMQX(MQTT協(xié)議)的實(shí)現(xiàn)
最近由于iot越來(lái)越火, 物聯(lián)網(wǎng)的需求越來(lái)越多, 那么理所當(dāng)然的使用mqtt的場(chǎng)景也就越來(lái)越多,本文主要介紹了springboot使用EMQX(MQTT協(xié)議)的實(shí)現(xiàn),感興趣的可以了解一下2023-10-10
java中的Io(input與output)操作總結(jié)(四)
前面已經(jīng)把java io的主要操作講完了,這一節(jié)我們來(lái)說(shuō)說(shuō)關(guān)于java io的其他內(nèi)容:Serializable序列化/DataOutputStream和DataInputStream類(lèi)/管道流等等,感興趣的朋友可以了解下2013-01-01
如何在JDK 9中更簡(jiǎn)潔使用 try-with-resources 語(yǔ)句
本文詳細(xì)介紹了自 JDK 7 引入的 try-with-resources 語(yǔ)句的原理和用法,以及介紹了 JDK 9 對(duì) try-with-resources 的改進(jìn),使得用戶(hù)可以更加方便、簡(jiǎn)潔的使用 try-with-resources 語(yǔ)句。,需要的朋友可以參考下2019-06-06
Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾功能
這篇文章主要介紹了Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾,本文講解了RocketMQ實(shí)現(xiàn)消息過(guò)濾,針對(duì)不同的業(yè)務(wù)場(chǎng)景選擇合適的方案即可,需要的朋友可以參考下2022-06-06
OpenFeign設(shè)置header的三種方式總結(jié)
在微服務(wù)間使用Feign進(jìn)行遠(yuǎn)程調(diào)用時(shí)需要在header中添加信息,下面這篇文章主要給大家介紹了關(guān)于OpenFeign設(shè)置header的三種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04

