本文实例讲述了rsa实现js前端加密与php后端解密功能。分享给大家供大家参考,具体如下:
web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入rsa。
前端加密
需引入4个js扩展文件,jsbn.js、prng4.js、rng.js和rsa.js。
<html><head> <title>rsa login test</title> <meta chart="utf-8"> <script type="text/javascript" src="./js/jsbn.js"></script> <script type="text/javascript" src="./js/prng4.js"></script> <script type="text/javascript" src="./js/rng.js"></script> <script type="text/javascript" src="./js/rsa.js"></script> <script src="//cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script> <script type="text/javascript"> fu亲爱的妈妈作文nction cmdencrypt() { var passwd = $('#passwd').val(); var rsa = new rsakey();//openssl生成的modulus,十六进制数据 var modulus = "db1ea572b55f5d9c8adf092f5dcc3559cfea8ce8bb54e3a71da9b1afbd7d17cf80adb224fe4ea5379bc782f41c137748d8f1b5a36ad62a127ef5e87efb25c209a66bcee9925ce09631bf2271e81123e93438646625080ff04f4f2cf532b077e3e390486df40e7586f0ae522c873f33170222f46bdb6084f55de6b7031e55dbe7"; //openssl生成秘钥时的e的值(0x10001)var exponent = "10001"; rsa.tpublic(modulus, exponent); var res = rsa.encrypt(passwd); $('#passwd').val(res); } </script></head><body><form action="./login.php" method="post" > <label for="urname">用户名:</label><input type="text" name="urname" id="urname"> <label for="passwd">密 码:</label><input type="password" name="password" id="passwd"> <input type="submit" value="登录" onclick="cmdencrypt();"></form></body></html>
前端代码十分简单,只有短短的几行,下面分别解释具体的含义:
1.new
一个rsakey对象,2.定义modulus(模数),我们可以根据私钥计算出该值(十六进制),具体指令: rsa -in rs雪人的故事a_private_key.pem -noout -modulus
3.定义exponent,此值在openssl生成秘钥时,输出,一般情况下e的取值是一个定值10001(十六进制)4.设置公钥5.加密数据至时间是矢量吗此,我们就完成了前端的公钥加密。
后端解密
//私钥$private_key = "-----begin rsa private key-----miicxaibaakbgqdicrxl+elhqfe0xcga3/xd美酒夜光杯n1vxwuc5kxakb5f3f28hy40zdxbnuwpdqnknhwtnvhzupbrhlypqx+1plti81sradtyknwvolrlwwp3mziyrrvo0hf3cvxn33r4a5y1yuh+txvfgikbmmnsjp4pp3cizc0tedmt1+h17cv6s6kddoqidaqabaogadu2/nqkdikvcc7+dn65yycyklovw34jqsxom++8nqfnsucktpzn60hraipetfu/l7x2jpqhp9+wuf1puyvjazqb5e9n8g12nxdubs5ux085inowp69pxnsljhyipmprgpf7zsgglftvxlg+hrufzxj26nqekwn61mi+cjmsmt/ecqqdpg868peijed/gpumtt7grgdadmpj0+aln82zsfa84zda8po9erefxrm2mar/fuvxl/vc0fbrygaa/vainkj6takea203jdovtnfg87znl9z0/z3kuxcmry+7m28+7btf1eadzxjwvfwtxcv4ejhjdn6clht6atuamw0snlta9n4cgpqjasbltxitubhv5u5htniq5thwzrzoyyldfpo7zi89on+a7yg4cebyi/ft9z6ysh7cvk1rg6wqfuyn4a3wj0ldlzqjbaijrpq0trbll25toxtaiki9jreduuga/mc1gu+albdhc+htzaxpvy0rlj2hgf9l6nf1dsw4rewqssfbnkcrkc+0cqclxcpv2wwsgmfhltqpkeyspievy4nrthv8zeyvm7muugvlsj6sqvcuuqbvholrpqqidi8tpaemhzs9fhdjvuuc=-----end rsa private key-----";$hex_encrypt_data = trim($_post['password']); //十六进制数据$encrypt_data = pack("h*", $hex_encrypt_data); //对十六进制数据进行转换openssl_private_decrypt($encrypt_data, $decrypt_data, $private_key); //解密数据echo '解密后的数据:' . $decrypt_data;
openssl操作截图:
需要注意的是:前端加密的时候如果是中文,则解密后是乱码。
openssl工具和完整demo,详见:https://github.com/cqingt/rsa_js_php
ps:关于加密解密感兴趣的朋友还可以参考本站在线工具:
在线rsa加密/解密工具:
文字在线加密解密工具(包含aes、des、rc4等):
在线散列/哈希算法加密工具:
在线md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160加密工具:
在线sha1/sha224/斗鱼嗨氏sha256/sha384/sha512加密工具:
本文发布于:2023-04-07 14:05:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8c493a82c4d4cd0f930aa4e8f72299ba.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:RSA实现JS前端加密与PHP后端解密功能示例.doc
本文 PDF 下载地址:RSA实现JS前端加密与PHP后端解密功能示例.pdf
留言与评论(共有 0 条评论) |