2

我需要解密使用 RSA 加密的消息,但我只有模数和私有指数作为 Base64 字符串。

我的方法是创建一个 RSAParameter 对象并使用 RSACryptoProvider.ImportParameters 方法导入它:

RSAParameters decryptParameters = new RSAParameters();

// D is the private exponent parameter
decryptParameters.D = Convert.FromBase64String(d);

// n is the Modulus
decryptParameters.Modulus = Convert.FromBase64String(n);

RSACryptoServiceProvider decrypter = new RSACryptoServiceProvider();
try
{
     decrypter.ImportParameters(decryptParameters);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

问题是我总是得到一个“坏数据”CryptographycException。

我究竟做错了什么?

我是否需要初始化 RSAParameters 结构中的其他值?哪个?从理论上讲,用于解密消息的私钥应该是 (n, d),即 Modulus 参数,但实现似乎需要更多信息。

4

1 回答 1

2

理论上你应该只需要模数和私有指数来解密。但是 API 明智,因为他们使用基于中国剩余定理的优化,您也需要原始素数,并且使用这些素数还需要预先计算 dP、dQ 和 Qinv。

于 2012-11-12T13:34:54.187 回答