HarmonyOS 鸿蒙Next md5 加密运算有问题
HarmonyOS 鸿蒙Next md5 加密运算有问题
使用 cryptoFramework 框架对一段特殊的字符串进行 md5 运算 “10CE9801D9BDF7657CCF26BFEA064446”的md5值,会少两个0,与其他语言、或者网上的运算工具都是正常的。
使用:cryptoFramework.createMd(“MD5”);对 “10CE9801D9BDF7657CCF26BFEA064446” 计算得倒的结果是:
5e9a80adb1536901e8a8442eda6d4c
使用:cryptoFramework.createMd(“MD5”);对 “10CE9801D9BDF7657CCF26BFEA064446” 计算得倒的结果是:
5e9a80adb1536901e8a8442eda6d4c
3 回复
参考代码:
const uni8 = getContext(this).resourceManager.getRawFileContentSync(‘app.js’)
let mdAlgName = “MD5”; // Digest algorithm name.
let md = cryptoFramework.createMd(mdAlgName);
let promiseMdUpdate = md.update({ data: uni8});
promiseMdUpdate.then(() => {
return md.digest();
}).then(digestOutput => {
console.debug("Demo str " + this.byte2Hex(Array.from(digestOutput.data)))
})
可能是中文字符转uint8Array的问题,如果对中文进行加解密,请尝试以下代码进行转换,加密时请用stringToUint8Array,解密时请用uint8ArrayToString:
// 字符串转成字节流
function stringToUint8Array(str: string) {
return new Uint8Array(buffer.from(str,‘utf-8’).buffer);
}
// 字节流转成可理解的字符串
function uint8ArrayToString(array:Uint8Array) {
// 将UTF-8编码转换成Unicode编码
let out: string = “”;
let index: number = 0;
let len: number = array.length;
while (index < len) {
let character = array[index++];
switch(character >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
out += String.fromCharCode(character);
break;
case 12:
case 13:
out += String.fromCharCode(((character & 0x1F) << 6) | (array[index++] & 0x3F));
break;
case 14:
out += String.fromCharCode(((character & 0x0F) << 12) | ((array[index++] & 0x3F) << 6) | ((array[index++] & 0x3F) << 0));
break;
default:
break;
}
}
return out;
}
MD5加密不安全吧,是不是不能用
作为IT专家,对于HarmonyOS(鸿蒙)Next系统中的MD5加密运算问题,这里提供一些专业解答思路:
MD5即Message-Digest Algorithm5(信息-摘要算法5),用于确保信息传输完整一致。MD5算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果。
- 处理原文:计算出原文长度(bit)对512求余的结果,如果不等于448,就需要填充原文使得原文对512求余的结果等于448。填充的方法是第一位填充1,其余位填充0。
- 设置初始值:MD5的哈希结果长度为128位,按每32位分成一组共4组。这4组结果是由4个初始值A、B、C、D经过不断演变得到。
- 循环加工:每个主循环中包含64次子循环,F、G、H、I四种非线性函数交替使用。
- 拼接结果:最终得到A、B、C、D四个32位分组,将其级联生成128位散列值。
如果上述流程正确无误但问题依旧存在,可能是系统或软件层面的特定问题。此时,建议直接联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html。