情况:Postman 使用 CryptoJS 对数据 AES解密后AES在线工具 解密不一致。

原因:数据中 "\n\r" 在 postman 中有不同含义,比如: "\r" 在windows"回车",在mac"换行"

方案:待解密数据 "\n\r"替换成 "",已保证数据连续不被 "\n\r" 切割

// 用UTF-8进行编码的字符串(按需进行处理,例如按Base64对密钥进行加密等)
var key = CryptoJS.enc.Utf8.parse(dataSecret);
var iv = CryptoJS.enc.Utf8.parse(dataSecretIv);// 自定义数据内容
var data = {"appId":appId, "appKey": appKey
};// 对数据进行AES加密
var encryptData = CryptoJS.AES.encrypt(JSON.stringify(data), key, {iv:iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString();// 对数据进行AES解密(注意JS或Postman中,返回的结果如果含有换行符,先处理再解密)
var decryptStr = encryptData.toString().replace(/\r\n/g,"").replace(/\n/g,"");
var decryptData = CryptoJS.AES.decrypt(response.data, key, {iv:iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);// 均上为伪码,注意使用。备注: PCKS7和5其实是一样的。

完整示例:

// 自定义数据
var data = {"outOrderId": "202003061634082266","driverId": "5757857","stubId": "1412729998476976128","gunId": "1","org": "TS","time": 1457689012,"preFrozenAmount": 30.00
};// 重写Date的format函数
Date.prototype.Format = function (fmt) { // author: meizzvar o = {"M+": this.getMonth() + 1, // 月份"d+": this.getDate(), // 日"h+": this.getHours(), // 小时"m+": this.getMinutes(), // 分"s+": this.getSeconds(), // 秒"q+": Math.floor((this.getMonth() + 3) / 3), // 季度"S": this.getMilliseconds() // 毫秒};if (/(y+)/.test(fmt))fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
}// 基于时间+4位随机数
var outOrderId = new Date().Format("yyyyMMddhhmmss") + Math.round(Math.random()*9999);
pm.environment.set("outOrderId", outOrderId);
data.outOrderId = outOrderId;// 获取Postman环境变量
var appSecret =pm.environment.get("appSecret");
var dataSecret = pm.environment.get("dataSecret");
var dataSecretIv = pm.environment.get("dataSecretIv");
var timeStamp = pm.environment.get("timeStamp");
var key = CryptoJS.enc.Utf8.parse(dataSecret);
var iv = CryptoJS.enc.Utf8.parse(dataSecretIv);// 数据加密(AES + HmacMD5 )
var encryptData = CryptoJS.AES.encrypt(JSON.stringify(data), key, {iv:iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString()
var sign = encryptData + timeStamp;
sign = CryptoJS.HmacMD5(sign, appSecret);
pm.environment.set("data", encryptData);
pm.environment.set("sign", sign.toString().toUpperCase());
// 获取Postman的环境变量
var appId = pm.environment.get("appId");
var appKey =pm.environment.get("appKey");
var appSecret =pm.environment.get("appSecret");
var dataSecret = pm.environment.get("dataSecret");
var dataSecretIv = pm.environment.get("dataSecretIv");
// 按需处理,UTF-8 -> 密钥和矢量
var key = CryptoJS.enc.Utf8.parse(dataSecret);
var iv = CryptoJS.enc.Utf8.parse(dataSecretIv);
// ------------------------------------------
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});var response = JSON.parse(responseBody);
if(response.code === 100){var decryptStr = response.data.toString().replace(/\r\n/g,"").replace(/\n/g,"");var decryptData = CryptoJS.AES.decrypt(decryptStr, key, {iv:iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);console.log(decryptData);postman.setEnvironmentVariable("orderId",JSON.parse(decryptData).orderId);return;
}
console.log(response);

tip:喜欢的小伙伴收藏和关注哟~

CryptoJS对密文AES解密失败相关推荐

  1. AES解密失败 WxMaCryptUtils.decrypt(sessionKey,encryptedData, iv)

    场景描述:小程序想接入微信步数. 目前以下参数都已经有值了: sessionKey.encryptedData.iv 调用微信工具来解密: WxMaCryptUtils.decrypt(session ...

  2. 微信开发-aes解密失败

    错误信息:解密微信回掉消息出现 aes解密失败 排查问题:  因为是微服务,客户收到消息会出现接受微信 会存在扫码有消息接受有,一会没有消息推送 于是排查问题 1.首先查看日志,具体看是什么问题,每台 ...

  3. 微信小程序AES解密失败

    微信小程序分享群获取群id时后端接口返回"微信AES解密失败",后来定位到原因是服务端用于解密的session_key失效.用户获取到openID存在缓存后,就不会每次login获 ...

  4. 解决Linux操作系统下AES解密失败的问题

    现象描述: windows上加解密正常,linux上加密正常,解密时发生如下异常: javax.crypto.BadPaddingException: Given final block not pr ...

  5. aes linux加密 windows解密,解决Linux操作系统下DES、AES解密失败的问题

    windows上加解密正常,linux上加密正常,解密时发生如下异常: javax.crypto.BadPaddingException: Given final block not properly ...

  6. java AES加密 前端CryptoJS AES解密

    问题 java加密生成base64位字符串,前端使用Java提供的密钥,前端无法解密出数据. java后台加密使用AES/ECB/PKCS5Padding 数据准备: 一个固定秘钥,互相约定 B7E1 ...

  7. 前端使用CryptoJS的AES解密,Java后端加密实现

    前端使用CryptoJS的AES解密,Java后端加密实现.CryptoJS的AES输出使用的是openssl格式,所以处理起来有一些不一样,详细代码如下: import org.bouncycast ...

  8. aes解密算法 java_AES算法实现Java和JS互通加解密

    实际开发中客户端与服务端的通信内容往往需要通过密文传输,本文将介绍可以实现Java与js的互相加解密的AES加密方式 Java语言实现 public class AESTest { //static ...

  9. python多线程爬取m3u8视频(包含AES解密)

    python爬取m3u8视频(包含AES解密) 前情提要 部分代码摘录于某位大哥(写代码的时候收藏书签了的打算写博客的时候带上链接的,无奈手贱删除了chrome用户,所有的书签也没了,找到再补上),在 ...

最新文章

  1. sed当中使用变量替换以及执行外部命令
  2. phone clone android,Phone Clone
  3. 、PHP只能访问mysql_php中 mysql函数不能调用,只有mysql_query()可以用
  4. python计算1到100的和-Python3基础 sum,range 计算1到100的和
  5. linux命令ping
  6. python入门到精通自学_python入门到精通大型视频、自学者的福利
  7. (25)2-9-9-12分页(下)
  8. EmberJS路由详解
  9. 用python os.system 执行 批处理的时候, 出现的一些问题
  10. MySql数据同步(双机热备)已正式应用上平台
  11. 关于miniconda的安装,配置以及包批量安装和使用
  12. 【IDEA】Cause: invalid type code: 8D
  13. 电脑的发展史_UI设计发展史及未来
  14. tesseract如何在Linux下卸载,Tesseract装配
  15. 荣耀笔记本锐龙版和linux,在家办公的最佳利器:荣耀笔记本14锐龙版体验
  16. python中的请求方法_Python爬虫HTPP请求方法有哪些
  17. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,
  18. django第一章(django配置相关和简单的登录实例)
  19. 标定学习笔记(九)-- 利用空间正交约束的相机自标定和三维重建
  20. python13:绩点计算

热门文章

  1. cadence SPB17.4 - allegro - Allegro2Altium.bat 初探
  2. arm linux内核编译
  3. 微型计算机的输入设备教案,高中信息技术教案设计:微型计算机的输入 输入设备1.doc...
  4. vscode无法跳转到函数定义
  5. pageadmin网站建设 如何修改和管理网站模板
  6. 一阶差分序列garch建模_探讨黄金价格实证分析中ARIMA-GARCH模型的应用
  7. LIKE 后的%和_代表什么?
  8. 极品鸿蒙系统 心月文谛,第五章:分身系统开启
  9. 避免全局变量污染的一些措施!
  10. C/C++语言的应用领域