HarmonyOS 鸿蒙Next md5 加密运算有问题

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

HarmonyOS 鸿蒙Next md5 加密运算有问题

使用 cryptoFramework 框架对一段特殊的字符串进行 md5 运算 “10CE9801D9BDF7657CCF26BFEA064446”的md5值,会少两个0,与其他语言、或者网上的运算工具都是正常的。
使用: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算法的过程分为四步:处理原文,设置初始值,循环加工,拼接结果。

  1. 处理原文:计算出原文长度(bit)对512求余的结果,如果不等于448,就需要填充原文使得原文对512求余的结果等于448。填充的方法是第一位填充1,其余位填充0。
  2. 设置初始值:MD5的哈希结果长度为128位,按每32位分成一组共4组。这4组结果是由4个初始值A、B、C、D经过不断演变得到。
  3. 循环加工:每个主循环中包含64次子循环,F、G、H、I四种非线性函数交替使用。
  4. 拼接结果:最终得到A、B、C、D四个32位分组,将其级联生成128位散列值。

如果上述流程正确无误但问题依旧存在,可能是系统或软件层面的特定问题。此时,建议直接联系官网客服以获取更专业的技术支持。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部