在 Pre-request Script Tab 下,使用 CryptoJS 编写 JS 脚本,对密码变量进行预处理 # Pre-request Script var password = "hu123456 "; //md5加密 //使用JS模块CryptoJS中的md5去加密数据 var password_encry = CryptoJS.MD5("hu123456").toString(); console.log 如果设置到局部环境,我们需要先新建一个环境,并创建一个变量才能在 JS 脚本中引用 image.png 最后,在请求体中替换成上面设置的变量即可 image.png 最后 Postman 可以借助 CryptoJS
) == 'string') { var srcs = CryptoJS.enc.Utf8.parse(word); encrypted = CryptoJS.AES.encrypt (srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 var iv = CryptoJS.enc.Utf8.parse("1234567890000000"); var encryptedHexStr = CryptoJS.enc.Hex.parse (word); var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); var decrypt = CryptoJS.AES.decrypt (srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7
{ mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: CryptoJS.enc.Utf8.parse(ivstr) }); let hexstr = encrypted.ciphertext.toString , { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: CryptoJS.enc.Utf8.parse(ivstr) }); return decrypted.toString (CryptoJS.enc.Utf8); } ?
idnumberDes.js 加解密封装 需要先安装 CryptoJS npm i crypto-js import CryptoJS from "crypto-js"; // des加密,isHex .parse(key); var encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB .parse(key); if (isHex) ciphertext = CryptoJS.enc.Hex.parse(ciphertext) else ciphertext = CryptoJS.enc.Base64 .parse(ciphertext) var decrypted = CryptoJS.DES.decrypt({ ciphertext }, keyHex, { mode: CryptoJS.mode.ECB , padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } export
(content, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 (CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }).toString(CryptoJS.enc.Utf8); } 例子 (content, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 ( CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(content)), CryptoJS.enc.Utf8.parse(key), {
var m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF"), // f = CryptoJS.enc.Utf8.parse("Dt8j9wGw %6HbxfFn"); f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn"), e = CryptoJS.enc.Hex.parse (t), n = CryptoJS.enc.Base64.stringify(e), a = CryptoJS.AES.decrypt(n, f, { iv: m, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }), r // f = CryptoJS.enc.Utf8.parse("Dt8j9wGw%6HbxfFn"); f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn");
://lib.eqh5.com/CryptoJS/1.0.1/cryptoJs.js function decrypt(result) { var ciphertext = null .parse(key), iv = CryptoJS.enc.Utf8.parse(iv); var decryptData = CryptoJS.AES.decrypt ': CryptoJS.pad.NoPadding }); return CryptoJS.enc.Utf8.stringify(decryptData); } .parse(key), iv = CryptoJS.enc.Utf8.parse(iv); var decryptData = CryptoJS.AES.decrypt ': CryptoJS.pad.NoPadding }); return CryptoJS.enc.Utf8.stringify(decryptData) } }
n = CryptoJS.AES.encrypt(t, e, { iv: o, mode: CryptoJS.mode.CBC n = CryptoJS.AES.encrypt(t, e, { iv: o, mode: CryptoJS.mode.CBC o = CryptoJS.enc.Hex.parse(e), n = CryptoJS.enc.Base64.stringify(o), a = CryptoJS.enc.Utf8.parse(this.aes_key), i = CryptoJS.enc.Utf8.parse(this.aes_iv mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(
vue项目中安装crypto-js 2、在项目中新建一个utils.js文件 3、utils.js文件中的内容 /** * 工具类 */ import Vue from 'vue' import CryptoJS == var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return encrypted.toString(); }, //解密 == var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); } } 注:1、一定要在该文件中引用vue和crypto-js。
' const key = CryptoJS.enc.Utf8.parse("密钥"); //十六位十六进制数作为密钥 const iv = CryptoJS.enc.Utf8.parse('密钥偏移量 (word); const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr); const decrypt = CryptoJS.AES.decrypt (srcs, key, {iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}); const decryptedStr = decrypt.toString .parse(word); let encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding : CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString().toUpperCase(); } 前端展示代码 <!
JS decrypt const CryptoJS = require("crypto-js"); var key = "aaad3e4fd540b0f79dca95606e72bf93" function decryptUrl(ciphertext) { return CryptoJS.AES.decrypt( { ciphertext: CryptoJS.enc.Base64url.parse (ciphertext) }, CryptoJS.enc.Hex.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, } ).toString(CryptoJS.enc.Utf8); } 运行如图:
先看e,e = w.a.enc.Utf8.parse() 然后是一个w.a.enc.Base64.parse,等同于解码: base64.b64decode(string) 因为网站使用的Cryptojs JS模拟 // npm install crypto-js var CryptoJS = require("crypto-js"); var C = CryptoJS; var C_lib = C.lib @#qweASD"))) var ciphertext = CryptoJS.enc.Base64.parse(t) const decryptDES = (ciphertext) => { if (ciphertext) { let decrypted = CryptoJS.DES.decrypt(ciphertext, keyHex, { mode: CryptoJS.mode.ECB , padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } else
.parse(key); const dataBytes = CryptoJS.enc.Utf8.parse(data); const encrypted = CryptoJS.AES.encrypt (dataBytes, keyBytes, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } function decrypt(data, key) { const keyBytes = CryptoJS.enc.Utf8 .parse(key); const decrypted = CryptoJS.AES.decrypt(data, keyBytes, { mode: CryptoJS.mode.ECB , padding: CryptoJS.pad.Pkcs7 }); return decrypted.toString(CryptoJS.enc.Utf8); } package.json
= CryptoJS.enc.Utf8.parse("key") // 使用Utf8格式解析密钥const iv: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8 ("ciphertext")word = CryptoJS.enc.Base64.stringify(word)const key: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8 : CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: iv}).toString(CryptoJS.enc.Utf8) // 将解密结果转为 let word1: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse("plaintext1")let word2: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse("plaintext2")let word3: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse("
前言 为了数据的安全,所以三端消息需要进行加密解密传输 步骤 安装crypto-js npm install crypto-js 加密解密方法 先AES加密,然后base64加密 import CryptoJS (CryptoJS.enc.Utf8.parse(data), CryptoJS.enc.Utf8.parse(aesKey), { iv: CryptoJS.enc.Utf8.parse(aesIv ), mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }) return CryptoJS.enc.Base64.stringify (CryptoJS.enc.Base64.stringify(CryptoJS.enc.Base64.parse(data)), CryptoJS.enc.Utf8.parse(aesKey), { iv: CryptoJS.enc.Utf8.parse(aesIv), mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 })
查看关键加密函数 9.可以看到典型的AES加密函数 10.继续回到调试关键位置,分析加密过程,取f值 11.扣取关键js加密函数,修改整理代码,取参数 function aes(l) { var n = CryptoJS.enc.Utf8 .parse("hmwPxEnQfF8asJdf") , t = CryptoJS.enc.Utf8.parse("hmwPxEnQfF8asJdf") , e = CryptoJS.enc.Utf8 .parse(l) , a = CryptoJS.AES.encrypt(e, n, { iv: t, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Base64.stringify(a.ciphertext) } 本地运行效果:
我们通过把utils.js里面的aes加密代码拷贝出来,修改之后如下: // import CryptoJS from 'crypto-js' 这是vue.js里面的写法 var CryptoJS .parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7 (word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify .parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7 (word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7}); return CryptoJS.enc.Utf8.stringify
<=> CryptoJS.DES var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 } ).toString(CryptoJS.enc.Utf8 <=> CryptoJS.DES var encrypt = CryptoJS.DES.encrypt(message, CryptoJS.enc.Utf8.parse(aseKey), (encrypt, CryptoJS.enc.Utf8.parse(aseKey), // 参数1=密钥, 参数2=解密内容 { mode: CryptoJS.mode.ECB , padding: CryptoJS.pad.Pkcs7 } ).toString(CryptoJS.enc.Utf8); // toString
.parse('1234567812345678'); var iv = CryptoJS.enc.Utf8.parse('1234567812345678'); var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(str), key, { keySize: 128 / 8, iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString();}3.3 = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(str), key, { keySize: 128 / 8, iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString
当前演示的方案基于 Vue2 + Springboot 2.5.15 整体方案流程示例图: 前端 安装 CryptoJs $ npm install crypto-js 使用 CryptoJs 进行加密 ='; // 一个 32 为的盐值 const IV_HEX = '6C4780FD8F895F8B5E084E8B52A16240'; const aesKey = CryptoJS.enc.Base64 .parse(BASE64_KEY); const iv = CryptoJS.enc.Hex.parse(IV_HEX); // 加密方法 export function aesEncrypt(data == 'object') { throw new Error('加密数据必须是非空对象'); } const encrypted = CryptoJS.AES.encrypt ( JSON.stringify(data), aesKey, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7