HarmonyOS 鸿蒙Next 如何正确的通过CryptoJS库对中文字符串进行AES加密?

发布于 1周前 作者 vueper 来自 鸿蒙OS

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库已被正确引入项目:

  1. 将中文字符串编码为UTF-8字节数组: 使用JavaScript的TextEncoder将中文字符串转换为UTF-8编码的Uint8Array。

  2. 将字节数组转换为CryptoJS可处理的格式: 使用CryptoJS的CryptoJS.lib.WordArray.create方法将Uint8Array转换为CryptoJS的WordArray格式。

  3. 进行AES加密: 使用CryptoJS的AES加密方法,传入密钥、明文(已转换为WordArray)和其他必要的配置(如加密模式、填充方式等)。

  4. 将加密结果转换为适合存储或传输的格式: 通常使用CryptoJS.enc.Base64.stringify将加密后的WordArray转换为Base64字符串。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部