分析url可知bj的后端是由Java写的,而且没有用https加密传输,但其实非对称加密的过程其实就是和https加密原理一样
大致过程如下:
1.在登录页面生成公钥和私钥,将私钥存在sesion中
2.公钥用于前端js页面对数据进行加密
3.将数据传输给后台,后台从session中拿到私钥,然后对数据进行解密,把session中的私钥删除
一、F12打开开发者工具,按下图准备好。
二、打开bj登录界面登录,然后找到以post方式提交的表单,即可看到用户名和密码,但是密码被加密了
三、分析加密方式
var password = document.getElementById("pwd").value;
这一段是提取你再表单中输入的密码
var encrypt = document.getElementById("passwordEncrypt").value;
这个是得到ID为passwordEncrypt的值即:true
if("true"==encrypt){
if(password.length<150){
password = encryptedPassword(password);
}
}else{
if(password.length>150){
encrypt = "true";
}
}
这个是为了判断密码长度,可能进而由此判断密码是否加密,如果没加密执行加密的那个函数加密,加密过了之后就返回TRUE,然后进行encodeURIComponent() 函数可把字符串作为 URI 组件进行编码,得到最终的表单中的密文,其中的加密函数encryptedPassword()在另外一个js文档中找到,如下图所示
var passwordEncode = encodeURIComponent(encodeURIComponent(password)).split("").reverse().join("");
这个是对password进行倒叙排列
var publicKeyExponent=document.getElementById("publicKeyExponent").value;
var publicKeyModulus=document.getElementById("publicKeyModulus").value;
这两行得到了这两个值:10001
和94dd2a8675fb779e6b9f7103698634cd400f27a154afa67af6166a43fc26417222a79506d34cacc7641946abda1785b7acf9910ad6a0978c91ec84d40b71d2891379af19ffb333e7517e390bd26ac312fe940c340466b4a5d4af1d65c3b5944078f96a1a51a5a53e4bc302818b7c9f63c4a1b07bd7d874cef1c3d4b2f5eb7871
RSAUtils.setMaxDigits(200);
var key = new RSAUtils.getKeyPair(publicKeyExponent, "", publicKeyModulus);
var passwordEncry = RSAUtils.encryptedString(key,passwordEncode);
这三行大概就是进行加密了,看不太懂。
然后加密过的数据传输到服务器之后,服务器在通过私匙解密,相比于https这种方式也可以保证一定的安全性,而且还省钱
参考链接:
Java Web 登录采用非对称加密(RSA算法)
版权属于:DATA
本文链接:https://zhlblog.cn/%E5%8E%9F%E5%88%9B/31.html
转载时须注明出处及本声明