HarmonyOS 鸿蒙Next cryptoFramework库AES CBC解码出来时乱码

HarmonyOS 鸿蒙Next cryptoFramework库AES CBC解码出来时乱码

static aesCBCDecrypt(encrypttext) {
  let cipherAlgName = 'AES128|CBC|PKCS7';
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128')
  let ivParam: cryptoFramework.IvParamsSpec = {
    algName: 'IvParamsSpec',
    iv: {
      data: this.stringToUint8Array("bc3f07fbe54c4b90", 16)
    }
  }
  var cipher;

  return symKeyGenerator.convertKey({
    data: this.stringToUint8Array("8985b2c4fb1900cf", 16)
  }).then(symKey => {
    try {
      cipher = cryptoFramework.createCipher(cipherAlgName);
      console.info(`xx cipher algName: ${cipher.algName}`);
    } catch (error) {
      console.error(`xx createCipher failed, ${error.code}, ${error.message}`);
      return null
    }
    return cipher.init(cryptoFramework.CryptoMode.DECRYPT_MODE, symKey, ivParam)
      .then(() => {
        let base64 = new util.Base64Helper();
        let result = base64.decodeSync(encrypttext);
        return cipher.update({
          data: result
        })
      })
      .then(output => {
        let result = this.uint8ArrayToString(output.data)
        return new Promise(resolve => {
          resolve(result)
        })
      }).catch(err => {
        return new Promise((_, reject) => {
          reject(err)
        })
      })
  }).catch(err => {
    return new Promise((_, reject) => {
      reject(err)
    })
  })
}

使用cryptoFramework解码,到返回发现还是乱码

如果把cipher.update修改为cipher.dofinal就直接报17630001错误了

这是密文:fb5a9cd88651478e7f7d41021b61074b346b3dd28110af251e0eb628ac28125d9007e3f33e2629906d6f17aac3b9e6073fbbf5c2d027eb8604972b0774738ce1deee415157ad35f872190f8cec9104b84ea8e31bf6a8cb870e5bc5b5ea04cd1a93a8e783a81472a3e41ef3d97353e055293cad51624d18cc44fc8c29daa6d6b896fed227fb51989d67d552543656ffb5665b0d04524f417fbe92668c923039664e290072b3802bf46218d43db59b0a63e624a57f7e6d643101ed853d627ccbd8acd404142dfc1293a775ce3ddd6e7f24a4ebb5ac03fc3b179131f30dbd6151beda58ab5c97b48fa3e3545fa0e49af90c9d5f587884c73d88f71b1a7a6359dd509ea210da144a41ecb646545a79c24cf6e2dd40f18ee010293bddfc4e6606109eeddb2ac43f02d0a17430dbe44dd120a5a0bce13db8d9af927044328ee5bd7202d195f5d84e471d895181836871cd5e4fce93c09d138178afdb20c407600ac46f3b5508ba576d2484e67bf0c709338b17dc6ebf9926f4505763a72e9de22eeed84889c9078783e777a8b7ffacb97adc09f2df6c763ffc1c7c25b3256c4220bcd0805bdf7cd4013a3a8278cfdfe855077034fd11bfb54c25fe1a1324e733400b49eb4b51df419b1d96062738b63bb56b9343eb48731e9d7180adb6848d857cf1d5a2235d1be46a9047d7eef77baa54d7dbfe0a02128775cf04a1a86d952cc17afe5a01d9dd45769b8f9f237c2ab95ec5151376e20d5b17ca28027da65215b5c0d78d8c61cbdd9206ef9fdeb80a4e25d03099f22ddc9801e53ff95404e97595cef7072bfd554bde1cd22dade3acd9186e3f8830ca2da41f39d633591aa7fca7b28cee6c99e7fe0ab92b0509fcd979ea937801ad3c486be0c95fccaaf5fb13cb5b0d6057ca0b2cbbdf00edd7e88dcdc641ef8ef8f33bfd3c913e4af574344b0d4b4b66206f1b8024eb6e858487dd2c92b5b873ebdec1e9b9bce5109116db022f4fced75aa1757c0dd99600067d2137dacd4fbf88c93ab6b90be0fdbdbef6dbd426fbb3fe221b4a2c9c48678a562eb70ebbdbb91aa56a2e8195d39f47dd6fdc4e168abc1ffdcee3247340db95d986a5abd15162fa234621d38f8b53394285002afd250d7d1067e8404c9cf4422a7bc325f3985dd7daf9ed0cbd67bdaea0401353a2fafef6a1995a8ecfcb7de56938f0605d14003c22899cda268a374b1dc1bbdccfaeea459db88c877577139d21b859c0f86139483c4fa08494ca4b37d5ac4cf8e6862ce3a663c81bc4f852c2a013d178821df0daad1b231ddf33f0c779c51c0b984806fb4054088f584c2c1dddf9befff5b71fad58e2d2a2bc2722c8c8f5e6d0ccf45c79df1a35567feafaa793c9d1957fcb09f2941da88d489a479e0a9727521d10eecc396b2c9dfb41940e650b24e70ecd90b0a457f42750f0a1c77e2375349b942d11a404714104518f48e227cda8155943706c1a1ad35b774d134e7d14ff49651c73c85b51105c477a1138a6938dbcced1a30e5c5404c460b99bb5b715628f3e014163f12cc765db67de8a4428be1afe67bb13f059f23ccfcbf5191b7634d0ad2e6bc8de97a529d70ba5c235b468945e0a3821ed6c0232b0d33300bf62751980204f0e0c76c648b61c09fbf84cd608ae9ab391f1da4313b43b6774e7e90dd95a881275471132a0a0428cbbfd395bea91787f06ff9cf424ab7018b7e30524153495564b22c2842fa1b6757ce239a58606c7a54bbce47a30ba73da6f50b0297ac3a6214db1cb9e5e5f171e9dbffa5eb242"


更多关于HarmonyOS 鸿蒙Next cryptoFramework库AES CBC解码出来时乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

你好,这个问题通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持

更多关于HarmonyOS 鸿蒙Next cryptoFramework库AES CBC解码出来时乱码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


TextDecoder还是乱码

uint8ArrayToString这个方法有问题 用 TextDecoder 就好了 真坑:)

TextDecoder解析出来的还乱码,

这个方法只能处理纯英文内容,试一试:

搜索万能的互联网,找到一篇文章,提供了更好的转换代码:https://zhuanlan.zhihu.com/p/444177696?utm_id=0。其中的 encode()decode() 分别将字符串转换成 Uint8Array 及反向转换。经测试对于纯英文或中英混合字符串都可正确转换。注意:原文中的 decode() 代码中有个小 bug,case77 前面需要有空格,没有也能运行不报错,但输出乱字符,避坑!

在HarmonyOS鸿蒙Next中,使用cryptoFramework库进行AES CBC模式解码时出现乱码,可能原因包括密钥不匹配、IV(初始化向量)错误、数据填充方式不一致或数据编码格式不正确。确保密钥和IV与加密时一致,检查数据填充方式(如PKCS7),并确认数据编码格式(如UTF-8)。若问题依旧,检查解码流程是否正确,包括数据输入、解码操作和输出处理。

回到顶部