HarmonyOS 鸿蒙Next 如何正确的通过CryptoJS库对中文字符串进行AES加密?
HarmonyOS 鸿蒙Next 如何正确的通过CryptoJS库对中文字符串进行AES加密?
通过CryptoJS库对字符串进行AES加密,非中文的字符串可以正确的加解密,但对带有中文的字符串加解密时则出现乱码,请指导一下如何通过CryptoJS正确的解密中文字符串。
2 回复
参考一下这个写法,这个是可以正常对中文加解密的
Text('DES decrypt')
.fontSize(20)
.margin(20)
.fontWeight(FontWeight.Bold)
.onClick(() => {
const word: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse("待加密字符串含有中文解密时有乱码...")
const key: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse("f8e85ef6f5e4829e")
const iv: CryptoJS.lib.WordArray = CryptoJS.enc.Utf8.parse('')
let desOutput: CryptoJS.lib.WordArray = CryptoJS.DES.encrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
iv: iv
}).ciphertext;
console.log('Message 加密后:' + desOutput.toString());
let desDecryptOutput = CryptoJS.DES.decrypt(CryptoJS.enc.Base64.stringify(desOutput), key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7,
iv: iv
}).toString(CryptoJS.enc.Utf8);
console.log('解密后:' + desDecryptOutput);
})
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
在HarmonyOS鸿蒙Next中,通过CryptoJS库对中文字符串进行AES加密,需要确保正确处理中文字符的编码。CryptoJS库本身不直接支持UTF-8编码的中文字符串加密,因此通常需要将中文字符串转换为字节数组(通常以UTF-8编码),再进行加密。
以下是一个基本步骤,假设CryptoJS库已被正确引入项目:
-
将中文字符串编码为UTF-8字节数组: 使用JavaScript的
TextEncoder
将中文字符串转换为UTF-8编码的Uint8Array。 -
将字节数组转换为CryptoJS可处理的格式: 使用CryptoJS的
CryptoJS.lib.WordArray.create
方法将Uint8Array转换为CryptoJS的WordArray格式。 -
进行AES加密: 使用CryptoJS的AES加密方法,传入密钥、明文(已转换为WordArray)和其他必要的配置(如加密模式、填充方式等)。
-
将加密结果转换为适合存储或传输的格式: 通常使用
CryptoJS.enc.Base64.stringify
将加密后的WordArray转换为Base64字符串。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html