Как конвертировать RSA из Python в PHP? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь зашифровать пароль для отправки через API для аутентификации. Моя ситуация очень похожа на другой пример шифрования

Часть Python имеет форму см. Функцию get_pwd_rsa

Часть Python:

import rsa

key = rsa.PublicKey(n, e)

encropy_pwd = rsa.encrypt(message, key)

binascii.b2a_hex(encropy_pwd)

И я попытался использовать phpseclib для решения моей проблемы, но результат шифрования неверен:

use phpseclib\Crypt\RSA;

$rsa = new RSA();

$rsa->loadKey([
    'n' => new \phpseclib\Math\BigInteger($n, 16),
    'e' => new \phpseclib\Math\BigInteger($e, 16),
]);

$ciphertext = $rsa->encrypt($message);

return bin2hex($ciphertext);

Результат шифрования неверен, и я не уверен, какую часть я пропустил.

1 Ответ

1 голос
/ 09 ноября 2019

В дополнение к тому, что сказал Джеймс, я подозреваю, что любая используемая вами библиотека Python выполняет заполнение PKCS1, если оно вообще выполняет заполнение.

Сравните это с phpseclib, который по умолчанию использует заполнение OAEP. Заполнение PKCS1 может быть включено, но оно по умолчанию соответствует более безопасному заполнению OAEP.

Кроме того, шифрование PKCS1 и OAEP рандомизировано. Я говорю это потому, что мне интересно, говорите ли вы, что код PHP неправильный, потому что он не дает того же результата, что и код Python. Это не должноЕсли вы дважды запускаете шифрование RSA с помощью phpseclib с одним и тем же открытым текстом и ключом каждый раз, вы каждый раз получаете новый зашифрованный текст. PKCS1 и OAEP были разработаны таким образом, чтобы защитить от известных атак открытого текста.

...