【发布时间】:2015-08-30 13:02:09
【问题描述】:
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>
所有库文件均已正确加载。谁能告诉我为什么加密不起作用?
【问题讨论】:
-
你有什么错误吗?
-
其实没有。我使用了alert(),发现执行“RSA.encrypt(element.value, key)”时javascript停止了
-
嗯.. 你确定公钥值编码正确吗?我看到 RSA 库希望它以特定格式放置。
-
是
key后面的var key = RSA.getPublicKey(pem);还是false?你能举一个PEM格式生成的公钥的例子吗?请edit你的问题包括缺失的信息。
标签: javascript php rsa phpseclib