for(d = 0;; d++)
{
if((d * e) % tn == 1)
break;
}
下面的代码被用在我的RSA方案,以找到哪个将用作解密密钥d变量的值(d,N ) 到目前为止,在处理大量数字时,此功能需要一段时间才能循环。我想知道是否有更快的算法,因为用大整数模数总是很慢。C++伪RSA求解d(解密密钥)快速地与大量
例如,如果e值是8161并且tn值是656316480,那么完全计算d需要4秒多的时间。该程序正常工作,只是这部分速度很慢。
我试过使用扩展欧几里得算法来计算D,但由于某种原因它总是给我带来麻烦。
uint64_t extended_gcd(uint64_t a, uint64_t b)
{
uint64_t x = 0, lastx = 1, y = 1, lasty = 0, temp, quotient;
while(b != 0)
{
temp = b;
quotient = a/b;
b = a % b;
a = temp;
temp = x;
x = lastx - quotient * x;
lastx = temp;
temp = y;
y = lasty - quotient * y;
lasty = temp;
}
return lasty;
}
捆绑有;
d = extended_gcd(tn, e)
if(d < 0) //d CAN be negative
d += tn;
伊夫从当我搜索我看到一个老论坛帖子复制上述功能(extended_gcd),它实际上做的工作,但只有少数。当数字变得太过极端时,返回值意外的大,搞乱了整个解密密钥。我不知道问题出在哪里,我无法在其他地方用相同的算法找到可靠的函数。就像我说的,我想找到一个更好的算法,我发布了第一个for循环,但我都没有想法。
如果可能的话,RSA会被破坏(并且每个人都会知道或者绝对没有人)。 –
@ElliottFrisch,所以你告诉我没有办法让它变得更快? – nurtul
好悲伤。我希望不会:) – namezero