Расшифровка RSA с помощью phpseclib не удалась - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть мобильное приложение, которое шифрует строки с помощью RSA и отправляет эти зашифрованные данные на веб-сервер PHP.

После поиска я обнаружил, что phpseclib используется для расшифровки RSA Последняя версия 2.0.

Независимо от того, что я получаю, несмотря на ошибку, несмотря на используемый режим

Я что-то не так делаю?

Что я пробовал:

Закрытый ключ для расшифровки:

-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBAJyHUgC1ijhsETeuoNMh4c4yrFoL4juL/yDderMC9fBd1TFgEoJ5dxzMzdlzVVj7Vc/H/I+k13yY3W0MknS//k8CAwEAAQJAaaL1l57s8lkUYZTL2tFh9+vA32BnxLIdc0ullAwqeJV21wXcEyDA67fbmBywdt+pVKkeO2NU7fD3e+DZREuJ0QIhAPZNo9jirkRl4i/Lv3jWt6SmeUBeyIKK0u4lZiBF9KAZAiEAorDjj2c9WBdP46S9hK7yj0U5/0QHB0pO01j9QSVBvqcCIQDrYre7hqdU5qmLVATgzxMiX5ZxViP53gJHZaZ8IV7vwQIgTTYEGafWjjsqGBC0PQdGaMZi+wnPCB+0/0rpjoRfClsCIBPzZw+lappnVxXHuUoQQeN6uevqSvmgvC42UyA4HABa
-----END RSA PRIVATE KEY-----

Зашифрованное сообщение (в кодировке base64):

SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n

Пример кода PHP:

$rsa = new RSA();
$rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
$rsa->loadKey($privateKey); 
echo $rsa->decrypt(base64_decode($strBase64));

Результат:

Notice: Decryption error in C:\xampp\htdocs\webservice\vendor\phpseclib\phpseclib\phpseclib\Crypt\RSA.php on line 2553

Режим:

$rsa->setEncryptionMode(RSA::ENCRYPTION_OAEP); 

Результат:

Notice: Decryption error in C:\xampp\htdocs\webservice\vendor\phpseclib\phpseclib\phpseclib\Crypt\RSA.php on line 2432

Режим:

$rsa->setEncryptionMode(RSA::ENCRYPTION_NONE); 

Результат:

string(128) "I�W��B'q����;k��}�1������=��x���*���_��aq�)�D� '�m{��� ��n���C:��t �E����R=�S�y�3$QC�EV.3C�{�.Y�jx�6��!�e�˱]�I ����S�/�'I�|"

1 Ответ

0 голосов
/ 01 декабря 2018

Как заметил Джеймс Полк, в вашей зашифрованной строке base64 есть несколько плохих символов.idk, что вы используете в PHP в качестве разделителя, но это работает для меня:

$strBase64 = 'SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n';
$strBase64 = str_replace(['\/', '\n'], ['/', ''], $strBase64);

Если вы используете двойные кавычки вместо одинарных кавычек, сделайте это:

$strBase64 = "SMZiVTAMizngWa5Yg2Xp0F3Coy4cIsLB6mru2rLhxnvS2SC\/rm9pgPVLdA\/hp+1TIbzHZqjc2lnP\nkvzh797WlA==\n";
$strBase64 = str_replace(['\/', "\n"], ['/', ''], $strBase64);
...