前端crypto-js解密报malformed utf-8 data小结

一般情况下,很少会在前端进行加解密的操作,因为没有太大的必要性,前端的代码是很容易看到的,即使这样,我觉得还是有比较处理一下的,至少不让别人一眼就看到信息

我使用localStorage存储了一些用户的用户名昵称等的信息,通过进行加解密处理,这里我选用了AES加密算法对json对象数据进行处理

按照官方的例子,如下

var CryptoJS = require("crypto-js");
 
var data = [{id: 1}, {id: 2}]
 
// Encrypt
var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), secret key 123);
 
// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext.toString(), secret key 123);
var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
 
console.log(decryptedData);

以上代码在chrome里运行没什么问题,可是在Safari的时候报了malformed utf-8 data

可能是前端加解密的场景比较少,搜到若干报这个错的,但是鲜有解决方法,其中有一个说加密数据不是8的整数倍就会报上述错误 解决方法:将数据加密后,再进行base64进行处理

以上,在safari,chrome,firefox运行没问题

一般情况下,很少会在前端进行加解密的操作,因为没有太大的必要性,前端的代码是很容易看到的,即使这样,我觉得还是有比较处理一下的,至少不让别人一眼就看到信息 我使用localStorage存储了一些用户的用户名昵称等的信息,通过进行加解密处理,这里我选用了AES加密算法对json对象数据进行处理 按照官方的例子,如下 var CryptoJS = require("crypto-js"); var data = [{id: 1}, {id: 2}] // Encrypt var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), secret key 123); // Decrypt var bytes = CryptoJS.AES.decrypt(ciphertext.toString(), secret key 123); var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); console.log(decryptedData); 以上代码在chrome里运行没什么问题,可是在Safari的时候报了malformed utf-8 data 可能是前端加解密的场景比较少,搜到若干报这个错的,但是鲜有解决方法,其中有一个说加密数据不是8的整数倍就会报上述错误 解决方法:将数据加密后,再进行base64进行处理 以上,在safari,chrome,firefox运行没问题
经验分享 程序员 微信小程序 职场和发展