HarmonyOS鸿蒙Next中AES加密CBC模式加密后在控制台打印出来是乱码

HarmonyOS鸿蒙Next中AES加密CBC模式加密后在控制台打印出来是乱码 为啥加密后得出来的加密串在控制台那里打印出来是乱码

let encryptText = await this.encryptMessagePromise(symKey, plainText);
console.info('加密encryptText====' + buffer.from(encryptText.data).toString('utf-8'));

加密encryptText==== ΓšuhUΩ�
解密decryptText====This is a test


更多关于HarmonyOS鸿蒙Next中AES加密CBC模式加密后在控制台打印出来是乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

字符串转byte数组参考以下方法。

function stringToArray(str:string) {
  let arr: Array<number> = [];

  for(let i = 0,j = str.length;i<j;++i) {
    arr.push(str.charCodeAt(i))
  }

  return arr;
}

使用UTF-8等其他编码格式时,可以使用@ohos.utils里的方法:TextEncoder 与 TextDecoder,实现字节数组与字符串的转化,具体可参考:@ohos.util (util工具函数)-ArkTS API-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者

乱码问题可以将

修改为

目前对称加解密中,PKCS5和PKCS7的实现相同,其padding长度和分组长度保持一致(即PKCS5和PKCS7在3DES中均按照8字节填充,在AES中均按照16字节填充),另有NoPadding表示不填充。

更多关于HarmonyOS鸿蒙Next中AES加密CBC模式加密后在控制台打印出来是乱码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用AES加密CBC模式加密后,控制台打印出乱码是正常现象。AES加密后的输出是二进制数据,直接打印到控制台会显示为乱码。这是因为控制台通常以文本形式显示数据,而加密后的数据不一定是可打印的字符。

要正确显示加密结果,可以将加密后的二进制数据转换为十六进制字符串或Base64编码。十六进制字符串将每个字节转换为两个十六进制字符,Base64编码则将二进制数据转换为可打印的ASCII字符。这两种方式都能避免乱码问题。

例如,使用Base64编码后的字符串可以直接在控制台打印,显示为可读的字符序列。如果需要进一步处理或传输加密数据,Base64编码也是常用的格式。

总结:AES加密后的二进制数据直接打印会出现乱码,建议将其转换为十六进制或Base64编码后再打印。

在HarmonyOS鸿蒙Next中使用AES加密CBC模式加密后,控制台打印乱码是因为加密后的数据是二进制格式,无法直接以字符串形式显示。建议将加密结果转换为Base64或Hex编码后再打印。例如,使用Base64.encodeToString()Hex.encodeHexString()进行转换,这样可以在控制台清晰查看加密后的数据。

回到顶部