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

java 非對(duì)稱加密算法DH實(shí)現(xiàn)詳解

 更新時(shí)間:2019年07月27日 16:16:22   作者:小破孩123  
這篇文章主要介紹了java 非對(duì)稱加密算法DH實(shí)現(xiàn)詳解 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

非對(duì)稱加密算法是相對(duì)于對(duì)稱加密算法來(lái)說(shuō)的,對(duì)于對(duì)稱加密算法請(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ì)稱加密算法(DH),到這里就總結(jié)完畢了。

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

相關(guān)文章

  • Springboot2 集成 druid 加密數(shù)據(jù)庫(kù)密碼的配置方法

    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ō)明

    這篇文章主要介紹了Java之System.getProperty()的作用及使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java注解@Transactional事務(wù)類內(nèi)調(diào)用不生效問(wèn)題及解決辦法

    Java注解@Transactional事務(wù)類內(nèi)調(diào)用不生效問(wèn)題及解決辦法

    這篇文章主要介紹了Java注解@Transactional事務(wù)類內(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ā)送帶附件的郵件

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • springboot使用EMQX(MQTT協(xié)議)的實(shí)現(xiàn)

    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靈活讀取Excel內(nèi)容

    一文教你如何使用Java靈活讀取Excel內(nèi)容

    這篇文章主要給大家介紹了關(guān)于如何使用Java靈活讀取Excel內(nèi)容的相關(guān)資料,讀取Excel數(shù)據(jù)是Java開(kāi)發(fā)中常見(jiàn)的任務(wù),文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • java中的Io(input與output)操作總結(jié)(四)

    java中的Io(input與output)操作總結(jié)(四)

    前面已經(jīng)把java io的主要操作講完了,這一節(jié)我們來(lái)說(shuō)說(shuō)關(guān)于java io的其他內(nèi)容:Serializable序列化/DataOutputStream和DataInputStream類/管道流等等,感興趣的朋友可以了解下
    2013-01-01
  • 如何在JDK 9中更簡(jiǎn)潔使用 try-with-resources 語(yǔ)句

    如何在JDK 9中更簡(jiǎn)潔使用 try-with-resources 語(yǔ)句

    本文詳細(xì)介紹了自 JDK 7 引入的 try-with-resources 語(yǔ)句的原理和用法,以及介紹了 JDK 9 對(duì) try-with-resources 的改進(jìn),使得用戶可以更加方便、簡(jiǎn)潔的使用 try-with-resources 語(yǔ)句。,需要的朋友可以參考下
    2019-06-06
  • Spring?Boot?整合RocketMq實(shí)現(xiàn)消息過(guò)濾功能

    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é)

    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

最新評(píng)論