RSA解密仅使用D,指数和模数

时间:2010-06-20 13:46:57

标签: c# .net rsa bouncycastle

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

RsaParameters struct不会使用这些。它在解密时拒绝了我,并使用“坏键”例外。

根据我的理解,这对在没有整个DQ DP INVERSEQ部件的情况下足以解密。 更重要的是,在我发现python与pyCrypto的一个例子中,它有一个RSA.construct方法,只采用上述部分。

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

3 个答案:

答案 0 :(得分: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#有一些相同的东西。

答案 1 :(得分:1)

根据您拥有的信息,您可以恢复缺少的所有信息,然后为RSACryptServiceProvider提供所需的所有参数。您需要开始的算法是here。请参阅第8.2.2(i)节,“与保理的关系”。第三段,从另一方面开始,继续概述一个简单的算法,你可以用来恢复质数p和q。通过这些,您可以轻松恢复其他值。你需要一个合理的BigInteger包。

答案 2 :(得分:0)

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