CryptoJS 前端加密解密踩坑

您所在的位置:网站首页 js双引号md5加密异常 CryptoJS 前端加密解密踩坑

CryptoJS 前端加密解密踩坑

2024-07-12 04:54| 来源: 网络整理| 查看: 265

原本的项目之前在接口传参的时候是有用了加密的,后面又有字段需要解密展示,原本的加密方法如下:

npm i crypto-js --save import CryptoJS from 'crypto-js'; let key = 'xxxxxxxx' let iv = 'xxxxxx' export function getAES (originData) { let data = CryptoJS.enc.Utf8.parse(originData); let key = CryptoJS.enc.Utf8.parse(key); let iv = CryptoJS.enc.Utf8.parse(iv); let encrypted = CryptoJS.AES.encrypt(data, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString(); }

然后一开始后端还没部署,我就先拿了本地没加密的数据,自己先加密想着看看解密出来对不对

export function getDecryptAES(word) { var decrypted = CryptoJS.AES.decrypt(word, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding, }); return decrypted.toString(CryptoJS.enc.Utf8);

在这里插入图片描述在这里插入图片描述 但是很奇怪,一直解密不出来,一开始一直以为是解密的方法有问题,试了很多种方法都不对, 摸不到头脑,然后在搜索文章的时候,看到有工具可以直接加密解密出结果,我就试了一下 在这里插入图片描述 诶,为什么加密结果和我的看起来不一样,虽然我是有加key和iv,但是感觉看起来就是不对呀

然后才发现原来我的加密是用ciphertext 是处理为16进制,而工具默认是加密成base64格式的,所以!

我要解密的话,我应该要把16进制先转换成base64的,再进行解密!思路瞬间打开!

export function getDecryptAES(word) { var encryptedHexStr = CryptoJS.enc.Hex.parse(word); var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); //上面两行就是将16进制转化为base64 var decrypted = CryptoJS.AES.decrypt(encryptedBase64Str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding, }); return decrypted.toString(CryptoJS.enc.Utf8);

在这里插入图片描述 nice 啊 ~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3