项目需要,登录密码在公网上传输时需要做相应的加密处理,经过讨论最终选择了RSA加解密的形式,废话不多说上代码吧~ 当然是有借鉴的
前端js:
.......
var rsa_n = '<?php echo $public_key ?>';
setMaxDigits(262); //这里我用的是 2048位的密钥 如果1024可以考虑把数字变小
var key = new RSAKeyPair("10001", '', rsa_n);
var password = $("#password").val();
date = date.getFullYear()+'-'+month+'-'+day+' '+hour+":"+minutes+":"+second
password = encryptedString(key, password+date);
$('input[name="password"]').val(password);
.......
依赖js 库
php解密:
$passWord = base64_encode(pack("H*", $passWord));//获取
$passWord = self::privatekeyDecodeing($passWord, true);
function privatekeyDecodeing($crypttext) {
$key_content = ScqUtil::getRsaPrivateKey();//获取公钥, 数据库文件。。
$prikeyid = openssl_get_privatekey ( $key_content );
$crypttext = base64_decode ( $crypttext );
$padding = OPENSSL_NO_PADDING;
if (openssl_private_decrypt ( $crypttext, $sourcestr, $prikeyid, $padding )) {
return rtrim ( strrev ( $sourcestr ), "\0" );
}
return;
}
密钥生成:
下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:
openssl genrsa -out rsa_private_key.pem 1024
openssl asn1parse -out temp.ans -i -inform PEM <rsa_private_key.pem
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=4 l= 257 prim: INTEGER :B710DADEB6A***********90EDE5777D7
B710DADEB6A***********90EDE5777D7 为公钥 这个放到前端js上去 也就是之前 rsa_n的值