天天看點

非對稱加密算法-RSA

非對稱加密算法-RSA

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

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

特點:

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

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

“私鑰加密,公鑰解密”或“公鑰加密,私鑰解密”

公鑰長度遠小于私鑰長度(對下邊的代碼進行測試,自己比較結果)

加解密流程:

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

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

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

實作方式:

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

Bouncy Castle(BC,工作模式沒有,填充方式可以采用PKCS1Padding,沒有PKCS7Padding,密鑰長度:512~65536(64的整數倍))

基于JDK實作的RSA加解密代碼:

注意:

自己若看了DH算法,試着比較一下RSA算法與DH的差別,并使這些一下更安全的RSA算法(生成兩個密鑰對,其實就是在上述的代碼中再添加一個乙方的密鑰對生成方法即可)

繼續閱讀