HarmonyOS 鸿蒙Next digest的编码格式错误

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

HarmonyOS 鸿蒙Next digest的编码格式错误 使用安全类库@ohos.security.cryptoFramework的digest接口,实现字符串的sha256摘要算法,实现代码如下

import cryptoFramework from "[@ohos](/user/ohos).security.cryptoFramework"
import util from "[@ohos](/user/ohos).util"

export namespace Digest {
  export async function sha256(str: string): Promise<string> {
    return digest(str, 'SHA256')
  }

  export async function digest(str: string, algName: string): Promise<string> {
    let bytes = string2bytes(str)
    let md = cryptoFramework.createMd(algName)
    await md.update({
      data: bytes
    })
    let result = await md.digest()
    let hash1 = bytes2string(result.data)
    let hash2 = bytes2string2(result.data)

    console.log(`zx_debug hash1 = ${hash1}`)
    console.log(`zx_debug hash2 = ${hash2}`)

    return hash1
  }

  function string2bytes(str: string): Uint8Array {
    let encoder = new util.TextEncoder()
    let buffer = new ArrayBuffer(str.length)
    let dest = new Uint8Array(buffer)
    encoder.encodeIntoUint8Array(str, dest)
    return dest
  }

  function bytes2string2(arr: Uint8Array): string {
    let textDecoder = util.TextDecoder.create();
    return textDecoder.decodeWithStream(arr);
  }

  function bytes2string(bytes: Uint8Array): string {
    for (var hex = [], i = 0; i < bytes.length; i++) {
      hex.push((bytes[i] >>> 4).toString(16));
      hex.push((bytes[i] & 0xF).toString(16));
    }
    return hex.join("");
  }

}

Digest.sha256('hello')

digest返回的Uint8Array,转换为字符串,有两个实现,其中:

  • bytes2string 可以正确返回sha256摘要字符串;
  • bytes2string2 不可以。

digest的入参是使用TextEncoder编码的格式,为什么返回值不能用TextDecoder解码?


更多关于HarmonyOS 鸿蒙Next digest的编码格式错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

问题1:TextEncoder中encodeInto方法和decodeWithStream方法如何配套使用

encodeInto:将字符串转为字节码

decodeWithStream:将字节码转为字符串

问题2:sha256摘要算法返回字节如何转为字符串

按照以往经验,MD5或者SHA256加密算法默认将返回字节转为16进制字符串。在一些常用SHA256加密网址通常使用16进制转换。

更多关于HarmonyOS 鸿蒙Next digest的编码格式错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next digest的编码格式错误”这一问题,以下提供直接且专业的回答:

HarmonyOS 鸿蒙Next digest的编码格式错误通常指的是在文件处理或数据传输过程中,文件的编码方式与预期或标准不符,导致解析或显示异常。编码格式错误可能源于多种原因,包括但不限于:

  1. 源文件编码问题:原始digest文件可能采用了不兼容或错误的编码方式保存,如UTF-8与GBK混用。

  2. 传输过程中的编码转换:在文件传输过程中,如果传输协议或系统默认编码与源文件编码不一致,可能导致编码转换错误。

  3. 解析器设置错误:解析digest文件的程序或工具可能未正确设置编码方式,导致无法正确解析文件内容。

解决此类问题,需要检查并统一源文件、传输协议及解析器的编码设置,确保各环节编码一致。同时,对于HarmonyOS系统下的特定应用或工具,应参考官方文档确认支持的编码格式,并进行相应调整。

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

回到顶部