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

java 中DH的方式實(shí)現(xiàn)非對稱加密的實(shí)例

 更新時(shí)間:2017年08月07日 09:29:53   作者:Sahadev_  
這篇文章主要介紹了java 中DH的方式實(shí)現(xiàn)非對稱加密的實(shí)例的相關(guān)資料,這里提供實(shí)現(xiàn)簡單實(shí)例,需要的朋友可以參考下

java 中DH的方式實(shí)現(xiàn)非對稱加密的實(shí)例

實(shí)現(xiàn)代碼:

package com.sahadev; 
 
import java.security.KeyFactory; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.spec.X509EncodedKeySpec; 
import java.util.Objects; 
 
import javax.crypto.Cipher; 
import javax.crypto.KeyAgreement; 
import javax.crypto.SecretKey; 
import javax.crypto.interfaces.DHPublicKey; 
import javax.crypto.spec.DHParameterSpec; 
 
import org.apache.commons.codec.binary.Hex; 
 
public class DH { 
 
  public static String src = "Hello,sahadev!"; 
 
  public static void main(String[] args) { 
    JDKDH(); 
  } 
 
  public static void JDKDH() { 
    try { 
      // 初始化發(fā)送方密鑰 
      KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH"); 
      senderKeyPairGenerator.initialize(512); 
      KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair(); 
      byte[] senderPublicKey = senderKeyPair.getPublic().getEncoded(); 
 
      // 初始化接收方的密鑰 
      KeyFactory instance = KeyFactory.getInstance("DH"); 
      X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKey); 
      PublicKey sendPublicKeyTemp = instance.generatePublic(x509EncodedKeySpec); 
      DHParameterSpec dhParameterSpec = ((DHPublicKey) sendPublicKeyTemp).getParams(); 
      KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH"); 
      keyPairGenerator.initialize(dhParameterSpec); 
      // 接收方生成密鑰 
      KeyPair generateKeyPair = keyPairGenerator.generateKeyPair(); 
      byte[] receiverPublicKey = generateKeyPair.getPublic().getEncoded(); 
      PrivateKey receiverPrivateKey = generateKeyPair.getPrivate(); 
 
      // 接收方密鑰構(gòu)建 
      KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH"); 
      receiverKeyAgreement.init(receiverPrivateKey); 
      receiverKeyAgreement.doPhase(senderKeyPair.getPublic(), true); 
      // 使用我的密鑰和你的公鑰生成密鑰 
      SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES"); 
 
      // 發(fā)送方密鑰構(gòu)建 
      KeyFactory keyFactory = KeyFactory.getInstance("DH"); 
      X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(receiverPublicKey); 
      PublicKey receiverPublicKeyTemp = keyFactory.generatePublic(x509EncodedKeySpec2); 
 
      // 發(fā)送方拿到接收方返回的公鑰做本地密鑰 
      KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH"); 
      senderKeyAgreement.init(senderKeyPair.getPrivate()); 
      senderKeyAgreement.doPhase(receiverPublicKeyTemp, true); 
      // 使用你的密鑰我的公鑰進(jìn)行構(gòu)建 
      SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES"); 
 
      // 判斷雙方的本地密鑰是否相同 
      if (Objects.equals(receiverDesKey, senderDesKey)) { 
        System.out.println("雙方密鑰相同"); 
      } 
 
      // 加密 
      Cipher cipher = Cipher.getInstance("DES"); 
      cipher.init(Cipher.ENCRYPT_MODE, senderDesKey); 
      byte[] result = cipher.doFinal(src.getBytes()); 
      System.out.println("加密結(jié)果為 : " + Hex.encodeHexString(result)); 
 
      // 解密 
      cipher.init(Cipher.DECRYPT_MODE, senderDesKey); 
      result = cipher.doFinal(result); 
      System.out.println("解密結(jié)果為 : " + new String(result)); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
 
  } 
 
} 

附上結(jié)果: 

雙方密鑰相同 
DES : da1cc13d388423e82a110539414b1ec0 
解密結(jié)果為 : Hello,sahadev! 

以上就是DH實(shí)現(xiàn)非對稱加密的實(shí)例,如有 疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Springboot中整合knife4j接口文檔的過程詳解

    Springboot中整合knife4j接口文檔的過程詳解

    knife4j就swagger的升級版API文檔的一個(gè)框架,但是用起來比swagger方便多了,UI更加豐富,這篇文章主要介紹了Springboot中整合knife4j接口文檔,需要的朋友可以參考下
    2022-04-04
  • springboot整合jasypt的詳細(xì)過程

    springboot整合jasypt的詳細(xì)過程

    這篇文章主要介紹了springboot整合jasypt的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-02-02
  • 使用Maven搭建Hadoop開發(fā)環(huán)境

    使用Maven搭建Hadoop開發(fā)環(huán)境

    這篇文章主要介紹了使用Maven搭建Hadoop開發(fā)環(huán)境的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 關(guān)于MyBatis Plus中使用or和and問題

    關(guān)于MyBatis Plus中使用or和and問題

    這篇文章主要介紹了關(guān)于MyBatis Plus中使用or和and問題,需要的朋友可以參考下
    2020-12-12
  • java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式

    java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式

    這篇文章主要介紹了java線程池合理設(shè)置最大線程數(shù)和核心線程數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(34)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(34)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • JAVA實(shí)現(xiàn)讀取txt文件內(nèi)容的方法

    JAVA實(shí)現(xiàn)讀取txt文件內(nèi)容的方法

    本篇文章主要介紹了JAVA實(shí)現(xiàn)讀取txt文件內(nèi)容的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Nacos?版本不一致報(bào)錯(cuò)Request?nacos?server?failed解決

    Nacos?版本不一致報(bào)錯(cuò)Request?nacos?server?failed解決

    這篇文章主要為大家介紹了Nacos?版本不一致報(bào)錯(cuò)Request?nacos?server?failed的解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java中如何獲取圖片文件格式(后綴)

    Java中如何獲取圖片文件格式(后綴)

    這篇文章主要介紹了Java中如何獲取圖片文件格式(后綴),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 詳解Java中的Vector

    詳解Java中的Vector

    Vector 可實(shí)現(xiàn)自動(dòng)增長的對象數(shù)組。本文通過實(shí)例代碼給大家詳細(xì)介紹java中的vector,感興趣的朋友一起看看吧
    2017-10-10

最新評論