phpseclib createKey() используя собственные простые числа

Можно ли сгенерировать закрытый и открытый ключ в формате PKCS#1, используя phpseclib и мои собственные простые числа? Я имею в виду, что у меня уже есть p и q, и я хочу сгенерировать оба ключа. Я пытаюсь сделать что-то вроде этого:

$p = new Math_BigInteger(...);
$q = new Math_BigInteger(...);
$custom_primes = serialize(array('primes'=>array(1=>$p,2=>$q)));
extract($rsa->createKey(512,10,$custom_primes));

Но это дает мне фатальную ошибку:

Fatal error: Call to a member function divide() on a non-object in /volume1/web/phpseclib/Crypt/RSA.php on line 705

Я проверил это, и он пытается разделить:

list($temp) = $lcm['top']->divide($lcm['bottom']);

Очевидно, я не настраиваю lcm в своей структуре $custom_primes, так как у меня есть только два простых числа. Итак, вопрос: возможно ли это вообще в phpseclib?

1 ответ

Похоже, вы пытаетесь использовать функцию частичного ключа phpseclib для достижения этой цели. Проблема в том, что ожидает больше, чем просто простые числа. Посмотрите это, например:

 return array(
    'privatekey' => '',
    'publickey' => '',
    'partialkey' => serialize(array(
        'primes' => $primes,
        'coefficients' => $coefficients,
        'lcm' => $lcm,
        'exponents' => $exponents
    ))
);

Первоначально $ lcm определяется так:

$lcm = array(
    'top' => $this->one->copy(),
    'bottom' => false
);

Так что, возможно, попробуйте сделать это тоже. Вероятно, вы можете удалить все функции вычислений из phpseclib, выполнить их самостоятельно, а затем передать $ part в phpseclib и позволить ему генерировать ключ в любом формате, в котором вы хотите его сгенерировать.

Другие вопросы по тегам