CryptoJS获取加密密钥

网站登录包加密

image-20220707183538777

在网站资源搜索AES、DES等字符,定位加密函数并下断点

1
2
3
4
5
k.a.AES.encrypt(c()(t.data), A, {
iv: q,
mode: k.a.mode.CBC,
padding: k.a.pad.Pkcs7
}

image-20220707183743662

获取加密函数A(key)和q(iv)的值

此处密钥不是明文而是CryptoJS专有的WordArray格式

image-20220707184041511

本地资源下载

npm install crypto-js

查阅资料可知,WordArray格式一般由CryptoJS.enc.Utf8.parse()方法转换原始字符串而来,由CryptoJS.enc.Utf8.stringify()方法将WordArray转换为原始字符串,那在这里使用CryptoJS.enc.Utf8.stringify()方法即可进行转换

确定WordArray格式

在CryptoJS代码中查找CryptoJS.enc.Utf8.stringify()方法,对words和sigBytes进行了解析

image-20220707185331507

使用CryptoJS.enc.Utf8.parse()转换一个字符串,查看下WordArray格式

1
2
3
4
5
6
var CryptoJS = require("crypto-js");

var a = CryptoJS.enc.Utf8.parse("Y1shui1111111111"); //16位密钥

console.log(a);

运行结果如下:

image-20220707184830662

根据浏览器断点获取的WordArray,转换出key和iv

image-20220707185926290

key:

image-20220707185641730

iv:

image-20220707185543105

解密明文

image-20220707185741155

总结

文章并不复杂,但中间由于把脚本WordArray位置添加了双引号,导致一直无法转换成功……