java 非對稱加密算法DH實現詳解

這篇文章主要介紹了java 非對稱加密算法DH實現詳解 ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

非對稱加密算法是相對於對稱加密算法來說的,對於對稱加密算法請查閱之前的總結,今天爲大家介紹一下DH算法,DH是一種密鑰交換算法,接收方根據發送方加密時的密鑰,生成接收方解密密鑰。下面就一起來學習一下吧:

初始化發送方密鑰:

KeyPairGenerator sendKeyPairGenerator = KeyPairGenerator.getInstance("DH");
      sendKeyPairGenerator.initialize(512);
      KeyPair sendKeyPair = sendKeyPairGenerator.generateKeyPair();
      byte[] sendPublicKeyEnc = sendKeyPair.getPublic().getEncoded();//生成發送方公鑰,發送給接收方(網絡、文件...)

初始化接收方密鑰:

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();

構建接收方密鑰:

KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");
      receiverKeyAgreement.init(receiverPrivateKey);
      receiverKeyAgreement.doPhase(receivePublicKey, true);
      
      SecretKey receiverDESKey = receiverKeyAgreement.generateSecret("DES");//接收方Key

構建發送方密鑰:

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");//發送方Key

發送方加密:

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

基於密鑰交換的非對稱加密算法(DH),到這裏就總結完畢了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章