Loading

DATA

BJ登录表单加密方式:非对称加密(RSA算法)
分析url可知bj的后端是由Java写的,而且没有用https加密传输,但其实非对称加密的过程其实就是和https...
扫描右侧二维码阅读全文
17
2021/07

BJ登录表单加密方式:非对称加密(RSA算法)

分析url可知bj的后端是由Java写的,而且没有用https加密传输,但其实非对称加密的过程其实就是和https加密原理一样
大致过程如下:
1.在登录页面生成公钥和私钥,将私钥存在sesion中
2.公钥用于前端js页面对数据进行加密
3.将数据传输给后台,后台从session中拿到私钥,然后对数据进行解密,把session中的私钥删除

一、F12打开开发者工具,按下图准备好。

1

二、打开bj登录界面登录,然后找到以post方式提交的表单,即可看到用户名和密码,但是密码被加密了

3

三、分析加密方式

找到用于加密的js代码
4
接下来逐步分析

var password = document.getElementById("pwd").value;

这一段是提取你再表单中输入的密码

 var  encrypt =  document.getElementById("passwordEncrypt").value; 

这个是得到ID为passwordEncrypt的值即:true
5

        if("true"==encrypt){
                        if(password.length<150){
                            password = encryptedPassword(password);
                        }
          }else{
                  if(password.length>150){
                       encrypt = "true";
                  }
          } 

这个是为了判断密码长度,可能进而由此判断密码是否加密,如果没加密执行加密的那个函数加密,加密过了之后就返回TRUE,然后进行encodeURIComponent() 函数可把字符串作为 URI 组件进行编码,得到最终的表单中的密文,其中的加密函数encryptedPassword()在另外一个js文档中找到,如下图所示
6

var passwordEncode = encodeURIComponent(encodeURIComponent(password)).split("").reverse().join(""); 

这个是对password进行倒叙排列

 var publicKeyExponent=document.getElementById("publicKeyExponent").value;
 var publicKeyModulus=document.getElementById("publicKeyModulus").value; 

这两行得到了这两个值:10001 94dd2a8675fb779e6b9f7103698634cd400f27a154afa67af6166a43fc26417222a79506d34cacc7641946abda1785b7acf9910ad6a0978c91ec84d40b71d2891379af19ffb333e7517e390bd26ac312fe940c340466b4a5d4af1d65c3b5944078f96a1a51a5a53e4bc302818b7c9f63c4a1b07bd7d874cef1c3d4b2f5eb7871
7

 RSAUtils.setMaxDigits(200);
 var key = new RSAUtils.getKeyPair(publicKeyExponent, "", publicKeyModulus); 
 var passwordEncry = RSAUtils.encryptedString(key,passwordEncode);

这三行大概就是进行加密了,看不太懂。
然后加密过的数据传输到服务器之后,服务器在通过私匙解密,相比于https这种方式也可以保证一定的安全性,而且还省钱

参考链接:
Java Web 登录采用非对称加密(RSA算法)

最后修改:2021 年 07 月 17 日 01 : 55 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论