md5字符串加密 怎么跟别的语言加密后的数字不一样啊?有人遇见过吗 HarmonyOS 鸿蒙Next

md5字符串加密 怎么跟别的语言加密后的数字不一样啊?有人遇见过吗 HarmonyOS 鸿蒙Next

上面是我的方法

我生成出来的字符串 为

BDBF7E7B07B5CF45162B489DA40F2BC //arkts生成

然后我别的程序生成都是下面的

BD0BF7E7B07B5CF45162B489DA40F2BC // oc .net生成

为什么鸿蒙的生成的md5第三位少了个0啊?鸿蒙是BDB别的语言都是BD0B 我的代码哪里有问题???

2 回复

自己解决了 论坛上找到个跟我一样的问题。。。 找了他的方法替换了一下。

public static async toMd5(text: string): Promise<string> {
  let md = cryptoFramework.createMd('MD5');
  await md.update({ data: new Uint8Array(buffer.from(text, 'utf-8').buffer) });
  let mdOutput = await md.digest();
  let md5Str = uint8ArrayToHexStr(mdOutput.data);
  return md5Str;
}
function uint8ArrayToHexStr(data: Uint8Array) {
  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.toUpperCase();
}

更多关于md5字符串加密 怎么跟别的语言加密后的数字不一样啊?有人遇见过吗 HarmonyOS 鸿蒙Next的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙系统中,MD5字符串加密结果与其他语言不一致,可能是由于以下几个原因:

  1. 字符编码差异:不同语言或系统在处理字符串时可能使用了不同的字符编码(如UTF-8、UTF-16等)。如果编码不一致,相同字符串的二进制表示会不同,导致MD5结果不同。

  2. 字符串处理方式不同:某些语言或框架可能会对字符串进行额外的处理,如去除空格、转换大小写等。这些操作会改变字符串的原始内容,从而影响MD5结果。

  3. MD5实现差异:虽然MD5算法是标准化的,但不同语言或平台的实现可能会有细微差异,如填充方式、字节序等,进而导致结果不同。

  4. 输入格式差异:如果输入字符串包含不可见字符(如换行符、制表符等),不同语言或系统对这些字符的处理方式可能不同,导致MD5结果不一致。

  5. 环境差异:在某些情况下,操作系统或运行环境的差异也可能影响MD5的计算结果。

要确认问题,可以检查以下几点:

  • 确保输入字符串的编码和处理方式一致。
  • 确认MD5算法的实现是否遵循标准。
  • 验证输入字符串中是否包含不可见字符。

如果需要进一步验证,可以对比不同语言或系统的原始输入和输出,找到差异点。

回到顶部