密钥交换方法是: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对象属性的屏幕截图:
答案 0 :(得分:1)
虽然RSA可以同时进行签名和加密,但它们不能互换使用(除了.NET不支持的原始/“无填充”版本的算法之外;即使这样,密钥也是“向后” “)。
签名blob通过使用私钥“加密”来计算。它由公钥“解密”,然后底层系统将其与提供的散列和散列算法进行比较。如果它们都匹配,则返回true;否则它返回false(如果它真的很混乱,可能会抛出异常)。
而不是rsa.Decrypt(signature, false)
你希望rsa.VerifyHash(hash, signature, hashAlgorithm, RSASignaturePadding.Pkcs1)
,它返回一个bool。
“坏密钥”异常是因为您只有一个公钥(足以验证),但称为解密(需要私钥)。