一.前言
通过前一节内容,我们可以拿到访问接口的载荷参数(加密过),如果没有印象,可以重温一遍上一节内容。
本次目标是对返回的加密内容进行解密!
二.打断点调试
从哪里打断点是一个问题,我的解决方法是继续跟栈。从上一节上讲到的a函数往下继续走,看看在哪会出现公司信息加密后的内容。
下图可以看到r.data就是要解密的数据,继续往下跟,看看它是怎么进行解密的!
后面要慢慢跟,因外解密内容快出来了。
这时候可以关注e变量,因为t.data值传给了e。
跟到这里就看见解密操作了。
三.对解密操作进行分析
通过下面的传参可知,e是加密的公司信息,t是载荷里面的kiv参数,这就是AES加密!拿到密钥才能进行解密!!
现在进入到n = c(e,t.iv)看看这个函数里面怎么解密。
这和上一节的加密方式一样!!可以用上一节的部分代码!!
四.JS代码
const CryptoJS = require("crypto-js");
var s = null;
function u() {
return s || (s = function() {
var e, t, n, r, i = null;
return i || (t = new RegExp("\\u200c","g"),
n = new RegExp("\\u200d","g"),
r = new RegExp(".{8}","g"),
e = "".replace(r, (function(e) {
return String.fromCharCode(parseInt(e.replace(t, 1).replace(n, 0), 2))
}
)),
e = "G$$QawckGfaLB97r",
i = {
key: CryptoJS.enc.Utf8.parse(e),
mode: CryptoJS.mode.CBC,
pad: CryptoJS.pad.Pkcs7
}),
i
}()),
s
};
function c(e, t) {
void 0 === e && (e = ""),
void 0 === t && (t = "");
var n = u()
, r = CryptoJS.AES.decrypt(e.toString(), n.key, {
iv: CryptoJS.enc.Utf8.parse(t),
mode: n.mode,
padding: n.pad
});
return r = r.toString(CryptoJS.enc.Utf8)
};
var e = '这里放被加密后的数据';
var t = '放载荷kiv数据';
var datea = c(e,t);
console.log(datea);
五.总结
通过这个网站的练习,可以更好的理解AES加解密。诸君共勉。