1. 程式人生 > >https://www.cnblogs.com/dreamOfChen/p/5098057.html

https://www.cnblogs.com/dreamOfChen/p/5098057.html

非對稱加密演算法--DH

注意:本節內容主要參考自《Java加密與解密的藝術(第2版)》第8章“高等加密演算法--非對稱加密演算法”

11.1、非對稱加密演算法

特點:

  • 傳送方和接收方均有一個金鑰對(公鑰+私鑰),其中公鑰傳播,私鑰自己儲存,不需要傳播
  • 私鑰不需要傳播的特性解決了對稱加密演算法中金鑰傳播的困難(這個困難一般通過線下傳遞可以解決)
  • 加密安全性極高,只用於一些電子商務網站,加解密速度遠低於對稱加密
  • 一般情況下,為了解決非對稱加密演算法加解密速度低的問題,採用非對稱加密(使用公鑰+私鑰對對稱加密的金鑰進行加解密)+對稱加密(加解密資料)相結合的方式。

常見演算法:

  • DH(非對稱加密的基石)
  • RSA(非對稱加密的經典,除了可用於非對稱加密,也可用於數字簽名,RSA--155(512位金鑰)已被破解)
  • ElGamal

11.2、DH(僅能用於金鑰分配,不能加解密資料)

實現方式:

  • JDK(金鑰長度:512~1024中的64的整數倍)

幾個概念:

  • 金鑰對:公鑰+私鑰
  • 本地金鑰:對稱加密的金鑰

整個流程:

1)甲乙雙方初始化各自的金鑰對

甲方構建出金鑰對keyPair1-->乙方使用甲方的金鑰對中的公鑰publicKey1構建出自己的金鑰對keyPair2

2)甲乙雙方構建各自的本地金鑰

甲方使用自己的私鑰privateKey1+乙方的公鑰publicKey2構建出自己的本地金鑰key1

乙方使用自己的私鑰privateKey2+甲方的公鑰publicKey1構建出自己的本地金鑰key2

最後會發現key1==key2,這兩個本地金鑰將會是接下來對對稱加密所使用的金鑰

3)傳送方(甲方或乙方均可)使用本地金鑰+對稱加密演算法對待加密資料進行加密,傳遞給接收方

4)接收方使用本地金鑰+對稱加密演算法對待解密資料進行解密