[英]Quicker way to calculate RSA private key in PHP
嗨,我需要在php中自己执行RSA算法。 我唯一有问题的是计算私钥的部分。 我的函数的工作方式是获取一个随机数,然后检查它是否适合私钥公式。 这很好用,但是唯一的问题是,当使用非常大的数字时,它会花费时间并且页面超时。 我想知道,有没有一种更好的方法可以实现这一目标而不必不断生成随机数? 这是必需的代码:
$decrypt = rand(1,($phi-1));
while(!private($decrypt, $encrypt, $phi)){
$decrypt = rand(1,($phi-1));
}
...
function private($decrypt, $encrypt, $phi) {
if(($decrypt * $encrypt) % ($phi) == 1){
Return true;
}
else{
Return false;
}
}
选项1:
您最好按顺序执行此操作。 您的rand()可以找到以前使用过的数字。 假设您的最大值是10,要求的数字是8或4,使用rand()可以获得3,5,9,10,3,6,2,7,3,6,9,10,1,3, 5、6、3、7、8,然后再回答答案。 如果按顺序运行,则最多要有10个调用才能获取它。
但是,您需要一个随机数,因此您可能应该从一个随机数开始,然后按顺序增加直到被击中-这样,根据您的起点,您可能会得到8,或者可能得到4。
选项2:
在那之后,您可以用数学方法解决其他问题。 从一个随机数开始,算出模数是多少,以及与1的差(如果为负,则加$phi
)。 然后,您可以从1运行到$decrypt
以找出修改后的数字与1的差值,然后添加该数字以加密您的响应。
$decrypt = 7
$encrypt = 9
$phi = 3
($decrypt * $encrypt) % ($phi) = 0
$differenceInMod = 1 - ($decrypt * $encrypt) % ($phi) = 1;
if ($differenceInMod < 0) {
$differenceInMod+=$phi;
}
for($i = 1; $i<$decrypt; $i++) {
if (($decrypt * $i) % ($phi) == $differenceInMod) {
$validEncrypt = $encrypt + $i;
break;
}
}
可能没有那么快的顺序(选项1)更快-但数字更小且有限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.