我想用我的私人RSA密鑰加密一些數據,然後用公鑰在客戶機上解密它。據我所知,這是使用RSA的正常方式。 但是,據我所知,在.NET Framework的RSACryptoServiceProvider
中存在這個問題。雖然當您提供公鑰和私鑰到RSACryptoServiceProvider
時,解密工作正常,但僅當您僅提供公鑰時才能解密。在這種情況下,我得到一個錯誤的填充:使用公鑰解密
Error occurred while decoding OAEP padding.
at System.Security.Cryptography.RSACryptoServiceProvider.DecryptKey(SafeKeyHandle pKeyContext, Byte[] pbEncryptedKey, Int32 cbEncryptedKey, Boolean fOAEP, ObjectHandleOnStack ohRetDecryptedKey)
at System.Security.Cryptography.RSACryptoServiceProvider.Decrypt(Byte[] rgb, Boolean fOAEP)
注:
- 我加密/與
fOAEP
設置爲true
解密。 - 我使用1024密鑰大小,我想要加密的數據不超過65個字節。
- 我從XML加載密鑰。
我錯過了什麼?我沒有看到任何可以更改的填充設置。
當然,我不能把我的私有密鑰到客戶機...
我應該嘗試像充氣城堡另一個庫?根據作者的說法,他的最終解決方案是使用this article中的代碼。但是沒有明確的解決方案,根據作者,他的最終解決方案是使用代碼this article。但是,如果可能,我寧願使用.NET Framework的代碼,但我不明白爲什麼解密失敗。
此外,我不認爲我的數據太長,this answer是任何相關性。
也許我可以使用SignHash()/ VerifyHash(),但我認爲那些在加密之前從數據計算散列,而我已經有一個散列計算,我只需要加密它。使用SignHash()會限制我可以使用的各種哈希算法,所以最好避免它。
「我想用我的私人RSA密鑰加密一些數據,然後用公鑰在客戶端機器上解密它。」我想你已經倒退了。您只能使用私鑰解密,但您可以使用公鑰進行加密。 –
@Steven V:當你簽署一個用於認證某些數據源的哈希(添加數字簽名)時,是不是使用私鑰加密的加密哈希的簽名?這就是我想要做的。 – NoOne
http://en.wikipedia.org/wiki/Public-key_cryptography「每個用戶都有一對密鑰 - 一個公共加密密鑰和一個私人解密密鑰。」 – Orch