将SignData函数与RSA一起使用时,“键集不存在”

时间:2014-02-21 19:12:09

标签: .net vb.net key rsa

“密钥集不存在”。我知道这个错误有很多问题,但我的完全不同。

我没有使用Windows证书商店的密钥,但加载公钥&来自2个裸字符串的私钥,使用方法“fromXMLString”。

rsa.fromXMLString "<RSAKeyValue><Modulus>......"

然后

rsa.SignData buffer, algSHA1

和Booom! :“键集不存在”

有人可以告诉我,使用2 xmlStrings中的rsa密钥对是无辜的,它完全与Windows证书存储无关吗?我有自己的存储和存储方法加载证书/密钥。

PS:关于此错误的问题的其他答案告诉提问者在证书库中设置私钥的正确权限。但就我而言,我在该商店中没有使用私钥文件,对吗?

1 个答案:

答案 0 :(得分:1)

我知道这个问题已有 7 年历史,但我遇到了完全相同的问题并发现了问题(至少对我而言)。

如果您使用 rsa.Encrypt() 加密数据,则需要您的公钥或私钥。两者都有效。当您使用解密 (rsa.Decrypt()) 时,您必须使用私钥。公钥无法做到这一点。

现在是重要的部分。签名翻转了这一点。您必须使用您的私钥通过 rsa.SignData() 签署您的数据!这很重要,因为只有私钥才能创建新的签名数据。对于 rsa.VerifyData() 的验证,您可以再次使用任一键。

例如,这允许您的客户验证许可证,而无需存储私钥。