如何从e(publickey),d(私钥)和模数计算p和q参数?
我手头有BigInteger键我可以将粘贴复制到代码中.一个公钥,一个私钥和一个模数.
我需要从中计算出RSA参数p和q.但我怀疑有一个我无法用谷歌找到的库.有任何想法吗?谢谢.
这不一定是暴力,因为我不是在私钥之后.我只有一个遗留系统,它存储公钥,私钥对和模数,我需要将它们放入c#以与RSACryptoServiceProvider一起使用.
所以它归结为计算(p + q)
public BigInteger _pPlusq()
{
int k = (this.getExponent() * this.getD() / this.getModulus()).IntValue();
BigInteger phiN = (this.getExponent() * this.getD() - 1) / k;
return phiN - this.getModulus() - 1;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.你能发现问题吗?
5个小时后...... :)
好.如何在C#中选择Zn*(http://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n)中的随机数?
我试图找到D使用P,Q和E(Dp,Dq和可得).(p-1mod q)
根据这个答案和这个答案并更新了这个问题用下面的方法,我应该得到D.
为了测试这一点,我生成了密钥对,并尝试从现有组件中计算组件,并将结果与原件进行比较.所有结果都很好,除了D.我从上面的答案中复制了我的计算错误.如果有人能告诉我我做错了什么会很棒.
测试代码
using System;
using System.Numerics;
using System.Security.Cryptography;
using System.Text;
class Program {
static RSAParameters key = new RSAParameters() {
P = new byte[]{
0xDE, 0xA6, 0x35, 0x0B, 0x0A, 0xA5, 0xD7, 0xA0, 0x5C, 0x49, 0xEA, 0xD1, 0x3F, 0xA6, 0xF5, 0x12,
0x19, 0x06, 0x25, 0x8A, 0xD9, 0xA7, 0x07, 0xE7, 0x0D, 0x8A, 0x7C, 0xB1, …Run Code Online (Sandbox Code Playgroud)