3

我正在尝试使用 RSACryptoServiceProvider 解密,但我只有模数和 d 对作为私钥和指数。

RsaParameters 结构不会使用这些。它在解密时拒绝我,但有一个例外“坏密钥”。

据我了解,这对足以在没有整个 DQ DP INVERSEQ 部分的情况下解密。此外,在我发现的带有 pyCrypto 的 python 示例中,它有一个 RSA.construct 方法,只需要上述部分。

.NET 框架或其他库中的类是否可能?我试过 BountyCastle 但没有运气。

4

3 回答 3

2

使用您拥有的信息,您可以恢复丢失的所有信息,然后向 RSACryptServiceProvider 提供所需的所有参数。您需要入门的算法在这里。请参阅第 8.2.2(i) 节“与保理的关系”。第三段以“另一方面”开头,继续概述一个简单的算法,您可以使用它来恢复素数 p 和 q。从中,您可以轻松恢复其他值。你需要一个合理的 BigInteger 包。

于 2010-06-20T15:48:06.377 回答
1

这只是一点点数学;)

k = c^d mod N

k 是明文
消息 c 是 chiffre
d 是你的私钥
N 是你的模数


在 Java 中它会是这样的:

BigInteger c = ...
BigInteger d = ...
BigInteger n = ...
BigInteger k = c.modPow(d, n);

我希望 C# 有一些相同的东西。

于 2010-06-20T14:29:26.013 回答
0

如果你不能让 .NET 框架来做这件事,我很久以前用 C++ 编写了一个程序(你可以通过一些努力将其转换为 C#),它手动执行 RSA 加密转换,并查看源代码,它看起来它应该使用私钥 (d) 操作而不提供 p 和 q。它位于http://sourceforge.net/projects/bmrsa/

于 2010-06-20T14:05:43.590 回答