使用RSA,当运行createKey时,它总是卡住,然后得到一个错误报告

时间:2014-11-17 10:29:06

标签: php rsa phpseclib

我已经下载了phpseclib0.3.9.zip。当我运行此代码时,会出现以下错误。我不知道是什么原因。

 <?php
set_include_path(get_include_path() . PATH_SEPARATOR . 'E:/software/PHPRSA');

include 'Crypt/RSA.php';

$rsa = new Crypt_RSA();
extract($rsa->createKey());

$plaintext = 'terrafrost';

$rsa->loadKey($privatekey);
$ciphertext = $rsa->encrypt($plaintext);

$rsa->loadKey($publickey);
echo $rsa->decrypt($ciphertext);
?>  

以下是错误报告:

         Call Stack
#   Time    Memory  Function    Location
1   0.0020  131696  {main}( )   ..\test1.php:0
2   0.0290  1276184 Crypt_RSA->createKey( ???, ???, ??? )   ..\test1.php:7
3   27.4046 1356352 Math_BigInteger->randomPrime( object(Math_BigInteger)[8], object(Math_BigInteger)[10], bool )   ..\RSA.php:662

帮助欣赏。

1 个答案:

答案 0 :(得分:1)

这是暂时的。

生成RSA密钥对是一项非常耗时的操作。特别是,当它生成两个素数时,它会创建大量的随机数并测试它们中的每一个,直到它找到一个素数。

拥有bcmath或gmp甚至openssl会加快速度。

你可以采取一些其他措施来加快速度......

  1. define('CRYPT_RSA_SMALLEST_PRIME', 256)可以提供帮助。这将使phpseclib使用多素数RSA。每个密钥都是256位而不是512位,因此生成素数会更快。另一方面,您的密钥很可能与其他RSA实现无法互操作。

  2. 您可以使用timeout参数和AJAX使其花费很长时间。更多信息:http://phpseclib.sourceforge.net/rsa/examples.html#timeout