我尝试使用crypto-js
加密和解密这个字符串:
const str = `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1ZDg5MjMxMjc5OTkxYjJhNGMwMjdjMGIiLCJoc2giOiIkMmEkMTMkWk53Y0cubjdRZFIybDA3S1RHd2RoLlN0QksudW5GSFVGLkZnZ0tQTGlUV2pOVEFqVy9SMm0iLCJncmFudCI6ImFjY2VzcyIsImlhdCI6MTU2OTI2ODUwMiwiZXhwIjoxNjAwODI2MTAyfQ.PQcCoF9d25bBqr1U4IhJbylpnKTYiad3NjCh_LvMfLE~3~null~undefined~434ce0149ce42606d8746bd9`;
但我得到了一个错误:
Error: Malformed UTF-8 data
我做错了什么?我该怎么弥补?
完整代码also on stackbliz:
import crypto from 'crypto-js';
const str = `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiI1ZDg5MjMxMjc5OTkxYjJhNGMwMjdjMGIiLCJoc2giOiIkMmEkMTMkWk53Y0cubjdRZFIybDA3S1RHd2RoLlN0QksudW5GSFVGLkZnZ0tQTGlUV2pOVEFqVy9SMm0iLCJncmFudCI6ImFjY2VzcyIsImlhdCI6MTU2OTI2ODUwMiwiZXhwIjoxNjAwODI2MTAyfQ.PQcCoF9d25bBqr1U4IhJbylpnKTYiad3NjCh_LvMfLE~9~null~undefined~434ce0149ce42606d8746bd9`;
const cryptoInfo = crypto.AES.encrypt(str, 'secret').toString();
console.log({ cryptoInfo });
const info2 = crypto.AES.decrypt(str, 'secret').toString(crypto.enc.Utf8);
console.log({ info2 });
9条答案
按热度按时间ix0qys7i1#
不知道为什么,但是你必须用对象 Package 你的字符串,并使用
JSON.stringify
才能使它工作。这里:
axzmvihb2#
我加密了一个名字并将其作为URL参数传递。我感到惊讶的是,解密代码不起作用,这是因为加密参数中生成的“+”字符。然后使用“encodeURIComponent”和“decodeURIComponent”它起作用了。
v8wbuo2f3#
您忘记将加密文本作为参数传递给decrypt函数。
**在decrypt函数中,您正在传递原始字符串,即'str'**这导致了上面代码中的问题,这里是正确的代码。
fruv7luv4#
尽管有以上建议,但请检查您的加密密钥和密钥,解密时加密密钥应与您加密时使用的加密密钥匹配。
frebpwbc5#
解决方案源码github
iqih9akk6#
试试这个工作示例。https://stackblitz.com/edit/node-ugh35d?file=package.json,test_crypto.js
在终端运行npm start,如果npm i没有完成,请执行。
tquggr8v7#
我遇到了同样的问题,似乎加密值是base64,需要先转换为utf-8。示例:
我找到了解决方案Here
z8dt9xmd8#
也许这有点好笑。。但这是我的前辈如何解决这个问题给我
我们有2个不同的门户网站,假设XYZ门户网站和ABC门户网站(我在XYZ门户网站面临这个问题)ABC是我们登录的门户网站。
所以在本地我已经打开了xyz门户和ABC门户..问题解决了..(之前我只打开xyz门户,所以我面临的问题):D
6gpjuf909#
我已经解决了清理本地存储的问题。