我正在尝试使用RSACryptoServiceProvider进行解密,但我只有模数和d对作为私钥以及指数。
RsaParameters struct不会使用这些。它在解密时拒绝了我,并使用“坏键”例外。
根据我的理解,这对在没有整个DQ DP INVERSEQ部件的情况下足以解密。 更重要的是,在我发现python与pyCrypto的一个例子中,它有一个RSA.construct方法,只采用上述部分。
是否可以使用.NET框架中的类或其他库?我尝试过BountyCastle,但没有运气。
答案 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/