Почему Javascript не зашифровал мою форму?

Библиотека Javascript RSA находится по https://github.com/ziyan/javascript-rsa

PHP RSA Library от http://phpseclib.sourceforge.net/

Пример с /questions/9000218/rsa-shifrovanie-deshifrovanie-sovmestimoe-s-javascript-i-php/9000224#9000224

Мой код (браузер все еще отправляет исходный текст на сервер):

<?php
include('Crypt/RSA.php');
session_start();
$rsa = new Crypt_RSA();
if(isset($_POST['password'])){
    echo $_POST['password'];
    echo 1;
    $rsa->loadKey($_SESSION['privatekey']);
    echo $rsa->decrypt($_POST['password']);
    exit();
}
extract($rsa->createKey(4096));

$_SESSION['privatekey']=$privatekey;
$publickey=str_replace("\n", "\\\n", $publickey);
?>
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript" type="text/javascript" src="jsbn.js"></script>
<script language="JavaScript" type="text/javascript" src="rsa.js"></script>
<script language="JavaScript">

    function encryptData(){

        //Don't forget to escape the lines:
        var pem = "<?php echo $publickey; ?>";
        var key = RSA.getPublicKey(pem);
        element=document.getElementById('password');
        element.value=RSA.encrypt(element.value, key);
    }
</script>
</head>
<body>

<form method='POST' id='txtAuth' onsubmit='encryptData()'>
    <input type='text' name='username'/>
    <input type='password' name='password' id='password' placeholder="password"/>
    <input name='submit' type='submit' value='Submit'>
</form>
</body>
</html>

Все файлы библиотеки загружены правильно. Может кто-нибудь сказать мне, почему не работает шифрование?

1 ответ

Решение

Поэтому я попробовал ваш код на своей локальной машине и столкнулся с несколькими проблемами.

  1. Ты делаешь str_replace("\n", "\\\n", $publickey) - Я должен был сделать str_replace("\r\n", "\\\n", $publickey) иначе я бы получил Uncaught SyntaxError: Unexpected token ILLEGAL ошибка в консоли javascript.

  2. Даже после того, как сделал #1, я все еще получаю Uncaught TypeError: this.toRadix is not a function ошибка. Я использую https://raw.githubusercontent.com/ziyan/javascript-rsa/master/src/jsbn.js и https://raw.githubusercontent.com/ziyan/javascript-rsa/master/src/rsa.js и я на самом деле не изменил ваш код вообще. Попробуйте сами: http://www.frostjedi.com/terra/so/

Тем не менее, глядя на ваш rsa.js... Я до сих пор придерживаюсь своего первоначального заявления, что $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); должен работать при условии, что ошибки JavaScript могут быть преодолены. К сожалению, поскольку я не могу их обойти (и меня не интересует исправление фрагмента кода, который не обновлялся три года), я не могу проверить. У вас есть рабочий пример, который не выдает ошибок в консоли JS?

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