非對稱加密演算法DH,RSA

非對稱加密演算法

特點:

  • 發送方和接收方均有一個密鑰對(公鑰+私鑰),其中公鑰傳播,私鑰自己保存,不需要傳播

  • 私鑰不需要傳播的特性解決了對稱加密演算法中密鑰傳播的困難(這個困難一般通過線下傳遞可以解決)

  • 加密安全性極高,只用於一些電子商務網站,加解密速度遠低於對稱加密

  • 一般情況下,為了解決非對稱加密演算法加解密速度低的問題,採用非對稱加密(使用公鑰+私鑰對對稱加密的密鑰進行加解密)+對稱加密(加解密數據)相結合的方式。

常見演算法:

  • DH(非對稱加密的基石)

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

DH(僅能用於密鑰分配,不能加解密數據)

實現方式:

Advertisements

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

幾個概念:

  • 密鑰對:公鑰+私鑰

  • 本地密鑰:對稱加密的密鑰

整個流程:

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

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

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

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

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

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

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

Advertisements

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

使用的常量

注意這裡使用的堆成加密演算法是DES,不知道為什麼在我本地,使用AES是不行的,有知道的大神可以私信或者評論告訴我

RSA(最經典的非對稱加密演算法)

特點:

  • 使用一套密鑰即可完成加解密(與DH不同)

  • 與DH不同的第二點是,RSA自己可以完成加解密,而DH需要依賴於對稱加密演算法

  • 公鑰加密,私鑰解密或者私鑰加密,公鑰解密

  • 公鑰長度遠小於私鑰長度

加解密流程:

1)發送方(假設為甲方)構建密鑰對,自己保留私鑰,將公鑰發送給接收方(假設為乙方)

2)甲方使用密鑰對消息進行加密,乙方使用公鑰對消息解密(「私鑰加密,公鑰解密」)或者乙方使用公鑰對消息進行加密,甲方使用私鑰對消息解密(「公鑰加密,私鑰解密」)

注意:公鑰加密方式存在安全隱患,如果需要更加安全的方式,就需要甲乙雙方均存一份密鑰對,僅僅使用「私鑰加密,公鑰解密」的方式,這種方式與DH類似,但是不同,在DH中甲乙雙方各自保留著自己的公鑰+私鑰,而更安全的RSA是甲乙方法均保存著自己的私鑰與對方的公鑰,這是RSA與DH的第三點不同。

實現方式:

  • JDK(工作模式只有ECB,填充方式可以採用PKCS1Padding,沒有PKCS5Padding,密鑰長度:512~65536(64的整數倍))

這裡我就不再貼代碼了,我就講一下在實際工作中最嚴格的使用方法

一般在工作中使用RSA進行加解密的時候,還會配合使用到數字簽名,之前其實我也一直是暈暈乎乎的,不知道怎麼使用,下面是使用流程:

1)消息發送者產生一個密鑰對(假如是:甲私鑰+甲公鑰),然後將甲公鑰發送給消息接收者

2)消息接受者產生一個密鑰對(假如是:乙私鑰+乙公鑰),然後將乙公鑰發送給消息發送者

3)消息發送者使用消息摘要演算法對原文進行加密(加密后的密文稱作摘要)

4)消息發送者將上述的摘要使用私鑰加密得到密文1--這個過程就被稱作簽名處理,得到的密文1就被稱作簽名(注意,這個簽名是名詞)

5)消息發送者將原文使用消息接受者的公鑰(也就是乙公鑰)進行加密生成密文2並與密文1一起發給消息接收者

6)消息接收者使用甲公鑰對密文1(即簽名)進行解密,得到摘要值content1

7)消息接收者使用自己的私鑰對密文2進行解密,得到摘要值content2

8)消息接收者使用與消息發送者相同的消息摘要演算法對content2進行加密,得到摘要值content3

9)比較content1是不是與content3相等,若相等,則說明消息沒有被篡改(消息完整性),也說明消息卻是來源於上述的消息發送方,並且消息的內容也不能被外界看到(因為其他人是無法偽造簽名的,這就完成了「抗否認性」和「認證消息來源」),我估計有人會蒙圈,其實我剛開始也有點蒙圈,必須慢慢看,在慢慢理解,有什麼不明白的可以評論,相互學習

Advertisements

你可能會喜歡