HarmonyOS 鸿蒙Next @ohos/crypto-js库中的MD5计算结果跟java的结果不一致
2 回复
doMdByPromise() {
// 摘要算法名称。
let mdAlgName = "MD5";
// 要进行摘要的数据。
let message = "粉红色发货时间";
let md = cryptoFramework.createMd(mdAlgName);
console.info("[Promise]: Md algName is: " + md.algName);
let promiseMdUpdate = md.update({ data: this.stringToUint8Array(message) });
promiseMdUpdate.then(() => {
// 调用 digest() 以返回结果。
let PromiseMdDigest = md.digest();
return PromiseMdDigest;
}).then(digestOutput => {
let mdOutput = digestOutput.data;
let str2 = this.uint8ArrayToHexStr(mdOutput);
console.info("[Promise]: MD result: " + mdOutput+str2);
let mdLen = md.getMdLength();
console.info("[Promise]: MD len: " + mdLen);
}).catch((error: BusinessError) => {
console.error("[Promise]: error: " + error.message);
});
}
stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}
//摘要结果是Uint8Array类型,转换得到十六进制字符串数据
uint8ArrayToHexStr(data: Uint8Array): string {
let hexString = "";
let i: number;
for (i = 0; i < data.length; i++) {
let char = ('00' + data[i].toString(16)).slice(-2);
hexString += char;
}
return hexString;
}
针对您提到的HarmonyOS 鸿蒙Next中@ohos/crypto-js库的MD5计算结果与Java不一致的问题,这通常是由于编码方式或库实现细节的差异导致的。为确保MD5计算的一致性,您可以尝试以下步骤:
- 确认输入数据一致:确保Java和鸿蒙端进行MD5计算的输入数据完全一致,包括字符编码。
- 使用相同编码:在进行MD5计算前,确保两端都使用UTF-8编码对字符串进行处理。
- 检查库版本:确认@ohos/crypto-js库和Java中使用的MD5实现库是否为最新版本,或是否存在已知的兼容性问题。
- 参考官方文档:查阅@ohos/crypto-js和Java MD5实现的官方文档,了解是否有特定的配置或注意事项。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。