我想用我的私人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