я использую сервер linux ubuntu с nginx, mysql, php7.3
- Я пытаюсь зашифровать сообщение с помощью открытого ключа rsa, сгенерированного на стороне сервера с помощью phpseclib (http://phpseclib.sourceforge.net/)
<?php
//session_start();
$rsa = new Crypt_RSA();
extract($rsa->createKey());
$rsa->loadKey($privatekey);
$_SESSION['pr']=(empty($_SESSION['pr'])) ? $rsa : $_SESSION['pr'];
$rsa->loadKey($publickey);
$_SESSION['pu']=(empty($_SESSION['pu'])) ? $rsa : $_SESSION['pu'];
?>
- Затем я пытаюсь использовать сгенерированный ключ для шифрования и расшифровки сообщения с библиотекой JSEncrypt (https://github.com/travist/jsencrypt), пока работает
<br /><input type="button" value="Show Encrypted" onclick="alert(crypted);"/> <input type="button" value="Show Decrypted" onclick="alert(decrypt);"/><br />
<script type="text/javascript">
var crypt = new JSEncrypt();
var public_key = '<?php echo der2pem($_SESSION["pu"], "RSA PUBLIC KEY";?>';
crypt.setPublicKey(public_key);
var input='i\'ve got a power';
var crypted=crypt.encrypt(input);
var decrypt=crypt.decrypt(crypted);
alert(crypted);
alert(decrypt);
</script>
- И, наконец, я пытаюсь расшифровать сообщение JSEencrypted с закрытым ключом, используя реализацию phpseclib rsa. Ожидаю получить оригинальное незашифрованное сообщение, но все, что я получил, это Примечание: ошибка дешифрования в enc/RSA.php в строке 2507. Пожалуйста, помогите мне, я пытался поместить декодированную строку b64, шестнадцатеричную строку, пытался удалить косые черты или символы +, и ничего не помогло. . Направьте меня в правильном направлении, пожалуйста, я застрял, как сука. Заранее спасибо!
<?php
// here i put the crypted var showed in alert
$var=base64_decode('##put your variable here');
$rsa->loadKey($_SESSION['pr']);
$dec=$rsa->decrypt($var);
echo '<br />'.$dec;
?>
Эй, Нойберт! Спасибо за ответ, вы действительно помогли мне выяснить точную проблему, которая у меня возникла: когда я использую функцию crypt.encrypt без установки ключа, сначала она сама создает пару ключей, а затем устанавливает ее сама, поэтому я не буду в состоянии расшифровать сообщение, используя ключи, сохраненные в моем сеансе php. Но следующей проблемой был формат pem rsa, который требуется для функции crypt.setKey. Итак, теперь я хотел бы спросить, знаете ли вы, как преобразовать $rsa в кодировке b64 в формат pem, я пытался добавить соответствующие строки с обеих сторон ключа, но это не помогает. Должен ли я взорвать его, чтобы разделить на 64-байтовые строки с «\ n» в конце каждой? Такая функция была найдена здесь