HarmonyOS 鸿蒙Next @ohos/crypto-js库中的MD5计算结果跟java的结果不一致

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

HarmonyOS 鸿蒙Next @ohos/crypto-js库中的MD5计算结果跟java的结果不一致

使用@ohos/crypto-js 2.0.3版本进行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计算的一致性,您可以尝试以下步骤:

  1. 确认输入数据一致:确保Java和鸿蒙端进行MD5计算的输入数据完全一致,包括字符编码。
  2. 使用相同编码:在进行MD5计算前,确保两端都使用UTF-8编码对字符串进行处理。
  3. 检查库版本:确认@ohos/crypto-js库和Java中使用的MD5实现库是否为最新版本,或是否存在已知的兼容性问题。
  4. 参考官方文档:查阅@ohos/crypto-js和Java MD5实现的官方文档,了解是否有特定的配置或注意事项。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部