使用RSACryptoServiceProvider

时间:2016-08-19 22:52:47

标签: c# encryption rsa

密钥交换方法是:RSA-PKCS1-KeyEx

所以我不认为其他类似问题的答案适用,我无法控制证书 - 它是有效的,应该有效。

.NET Framework 3.5

代码:

        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PublicKey.Key;
        byte[] bytestodecrypt = Convert.FromBase64String(SignatureValue);
        byte[] plainbytes = rsa.Decrypt(bytestodecrypt, false); 

rsa对象属性的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:1)

虽然RSA可以同时进行签名和加密,但它们不能互换使用(除了.NET不支持的原始/“无填充”版本的算法之外;即使这样,密钥也是“向后” “)。

签名blob通过使用私钥“加密”来计算。它由公钥“解密”,然后底层系统将其与提供的散列和散列算法进行比较。如果它们都匹配,则返回true;否则它返回false(如果它真的很混乱,可能会抛出异常)。

而不是rsa.Decrypt(signature, false)你希望rsa.VerifyHash(hash, signature, hashAlgorithm, RSASignaturePadding.Pkcs1),它返回一个bool。

“坏密钥”异常是因为您只有一个公钥(足以验证),但称为解密(需要私钥)。