HarmonyOS 鸿蒙Next digest的编码格式错误
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
问题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的编码格式错误通常指的是在文件处理或数据传输过程中,文件的编码方式与预期或标准不符,导致解析或显示异常。编码格式错误可能源于多种原因,包括但不限于:
-
源文件编码问题:原始digest文件可能采用了不兼容或错误的编码方式保存,如UTF-8与GBK混用。
-
传输过程中的编码转换:在文件传输过程中,如果传输协议或系统默认编码与源文件编码不一致,可能导致编码转换错误。
-
解析器设置错误:解析digest文件的程序或工具可能未正确设置编码方式,导致无法正确解析文件内容。
解决此类问题,需要检查并统一源文件、传输协议及解析器的编码设置,确保各环节编码一致。同时,对于HarmonyOS系统下的特定应用或工具,应参考官方文档确认支持的编码格式,并进行相应调整。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html