今天服務器端一哥們突然跑過來跟我說:我發現公鑰每次加密都不同結果啊?
我說:怎么可能?不同的話,私要怎么解密和驗證啊?
然后我屁顛屁顛的試了下,結果發現不論在在線RSA的還是自己公司 利用同一個明文加密,都會生成不同的秘文。 然后解密確是都能解出來。。。。
這個時候我就有點費解了 在自己的理解里面一般RSA不是:滿足如下條件嗎?
1)、密文 = 明文^e mod n 2)、明文 = 密文^d mod n 3)、那么 publickKey = (e,n),privateKey = (d,n)
難道我真的記錯了?
其實后來在網上查找了下 ,才發現其實這個算法是沒錯,只是我們的RSA在加密同一個數據過程中,加入了隨機數處理(即加鹽-salt),這樣就導致每次需要加密的明文都是不同的,那么顯然密文就每次都不同了。 那么解密后怎么會是同一個呢? 答案很簡單,那就是 客戶端和服務器端同樣解隨機數。 具體如下方案:
1)、 密文 =( random+明文) ^e mod n //publicKey 加密 2)、(random+明文) = 密文^d mod n // 服務器端利用privateKey 解密
3)、 明文 = (random+明文) - random //服務器端解碼出random 4)、 明文和數據庫中數據比較
感覺這哥們的解釋:http://blog.csdn.net/guyongqiangx/article/details/74930951