首先,那不是打字錯誤,我想解密使用公衆鍵。這樣做的目的是挑戰第三方,以確保他們確實擁有與公鑰對應的私鑰。基本上,我會發送一些隨機數據,他們會用他們的私鑰對它進行加密,然後使用公鑰對其進行解密,並將解密後的值與我發送的隨機數據進行比較。我相信這是一個非常標準的公鑰加密程序,但由於某些原因,使用公鑰解密似乎是禁忌。使用RSA公開密鑰解密數據
我只是在.NET 2.0中使用RSACryptoServiceProvider
。但是,當我撥打Decrypt
時,它會顯示CryptographicException
,並顯示消息Bad Key
。關鍵是不壞(我可以Encrypt
沒有問題),但它似乎不會讓我只用公鑰解密。是什麼賦予了?這一定是可以做到的。
*「但我的理解是簽名實際上只是使用私鑰進行加密」* - 嗯,是,不是。理論上是。然而,在實踐中,您首先對輸入進行散列,使用私鑰對* hash *進行加密,然後將其附加到消息中,因爲RSA在計算上非常昂貴。事實上,實際上,在加密時,您甚至不用公鑰對輸入進行加密:您需要對大型隨機數進行加密,並將該數字用作快速對稱加密算法(如AES)的密鑰。 – 2010-06-25 22:25:43
@BlueRaja,我實際上意識到這一點(散列和RSA僅用於交換隨機會話密鑰)。這就是爲什麼我引用'SignHash'的一部分。我的觀點是「簽署x」==「用私鑰加密x」。無論x是散列還是真實消息,這都適用。 – 2010-06-25 22:36:38
簽名和加密的主要區別在於,當你*加密*時,你用隨機數據填充(以防止明文猜測攻擊);當*符號*時,您將填充具有預定義結構的數據(以防止選擇餘數的攻擊)。在驗證簽名時,驗證填充數據是否正確也很重要。 – caf 2010-06-26 13:43:42