为什么Javascript没有加密我的表单


Why the Javascript did not encrypt my form?

Javascript RSA库来自https://github.com/ziyan/javascript-rsa

PHP RSA库来自http://phpseclib.sourceforge.net/

示例来自https://stackoverflow.com/a/10922491/5281854

我的代码(浏览器仍然将原始文本发送到服务器):

<?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. 你正在做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控制台中不会产生错误的工作示例吗?