HarmonyOS鸿蒙Next中MD5摘要算法与其他语言结果不同

HarmonyOS鸿蒙Next中MD5摘要算法与其他语言结果不同 如下:

let vd = "88e10fbcd63aab1029be6b4935af6fa120240722200833";
let md5 = cryptoFramework.createMd("MD5");
md5.updateSync({ data: new Uint8Array(buffer.from(base, 'utf-8').buffer) });
let ret = md5.digestSync();
let ba = (buffer.from(ret.data).toString("hex"));
ba = "f22601f971479bbed7c00077cb30f559"

其他语言结果为:“f67d8f14a5f9d8c6fc5c2d5d9e54574d”,在网上找的在线md5算法结果与之相同,请确认下问题在哪


更多关于HarmonyOS鸿蒙Next中MD5摘要算法与其他语言结果不同的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

您用这个示例代码进行加密,会得到同一结果:

async function doMd5(bodyStr: string) {
  let TAG='Test-';

  let mdAlgName = 'MD5';

  let md = cryptoFramework.createMd(mdAlgName);

  console.info('mdAlgName:' + md.algName);

  let promiseMdUpdate = md.update({ data: stringToUint8Array(bodyStr) });

  promiseMdUpdate.then(() => {
    let PromiseMdDigest = md.digest();

    // console.log('MD5:'+PromiseMdDigest);
    return PromiseMdDigest;
  }).then(digestOutput => {
    let mdOutput = digestOutput;

    console.info(TAG+'Result:' + mdOutput.data);

    // 转成16进制
    let buf=buffer.from(mdOutput.data);
    console.log(TAG+'Hex222:'+buf.toString('hex'));

    let mdLen = md.getMdLength();
    console.info(TAG+'MDlength: '+ mdLen);

    // 转成base64
    let base64=new util.Base64Helper;
    let resBase64=base64.encodeToStringSync(mdOutput.data)
    console.log(TAG+'base64:'+resBase64)
  }).catch((error: BusinessError) => {
    console.error('error:' + error.message);
  });
}

参考链接:

更多关于HarmonyOS鸿蒙Next中MD5摘要算法与其他语言结果不同的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,MD5摘要算法的实现可能与其他语言(如Python、JavaScript等)的结果不同,主要原因在于以下几点:

  1. 字节序处理差异:不同编程语言在处理数据时,字节序(Big-Endian或Little-Endian)可能不同,这会影响MD5计算的结果。

  2. 编码方式不同:字符串在计算MD5时,需要先转换为字节数组。不同语言默认的编码方式(如UTF-8、ASCII等)可能导致字节数组不同,从而影响MD5结果。

  3. 填充与边界处理:MD5算法在计算时需要对输入数据进行填充,不同语言在填充方式和边界处理上可能存在差异,导致结果不一致。

  4. 实现细节差异:不同语言的MD5实现可能存在细微的算法差异,例如初始化向量的处理、循环次数的优化等,这些细节也会影响最终结果。

  5. 库版本与优化:不同语言或不同版本的MD5库可能采用了不同的优化策略或修复了某些bug,这也会导致计算结果不同。

总结:HarmonyOS鸿蒙Next中MD5算法的结果与其他语言不同,主要是由于字节序、编码方式、填充处理、实现细节及库版本等因素的差异所致。

在HarmonyOS鸿蒙Next中,MD5摘要算法的实现可能与其他编程语言(如Java、Python等)的结果不同,通常是由于以下原因:

  1. 编码方式不同:输入字符串的编码方式(如UTF-8、GBK等)会影响MD5结果。确保输入数据的编码一致。

  2. 空格或换行符:输入数据中的不可见字符(如空格、换行符)可能导致结果差异。

  3. 算法实现差异:不同语言或平台的MD5库可能存在细微实现差异,导致结果不一致。

建议检查输入数据的完整性和编码方式,确保不同平台下的输入一致。可以使用在线MD5工具进行验证。

回到顶部