Я скачал 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
Помогите быть оцененным.
Время истекло.
Генерация пар ключей RSA является чрезвычайно трудоемкой операцией. В частности, когда он генерирует два простых числа, он создает множество случайных чисел и проверяет каждое из них, пока не найдет простое число.
Наличие bcmath, gmp или даже openssl значительно ускорит процесс.
Несколько других вещей, которые вы могли бы сделать, чтобы ускорить процесс …
define('CRYPT_RSA_SMALLEST_PRIME', 256)
мог бы помочь. Это заставит phpseclib использовать несколько простых RSA. Каждый ключ будет 256-битным, а не 512-битным, поэтому генерация простых чисел будет быстрее. С другой стороны, ваш ключ, вероятно, не будет очень совместим с другими реализациями RSA.
Вы можете использовать параметр timeout и AJAX, чтобы он занимал сколько угодно времени. Больше информации: http://phpseclib.sourceforge.net/rsa/examples.html#timeout
Других решений пока нет …