HarmonyOS 鸿蒙Next md5算法,输入同样的值有时结果不同,有时与三方的不同,而且算法耗时较长

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

HarmonyOS 鸿蒙Next md5算法,输入同样的值有时结果不同,有时与三方的不同,而且算法耗时较长

HarmonyOS md5算法,输入同样的值有时结果不同,有时与三方的不同,而且算法耗时较长?

2 回复
import { cryptoFramework } from '@kit.CryptoArchitectureKit';
import { buffer } from '@kit.ArkTS';
@Entry
@Component
struct MD5Page {
  @State message: string = 'Hello World';
  build() {
    Column() {
      Button("MD5 加密").onClick(async () => {
        const md = cryptoFramework.createMd("MD5");
        const contentUint8Array = stringToUint8Array("hello啊");
        await md.update({ data: contentUint8Array })
        let mdDigest = await md.digest();
        const str = uint8ArrayToString(mdDigest.data)
        console.log('Demo doMdRes ' + str)
        let buf = buffer.from(mdDigest.data);
        console.log("Hex:" + uint8ArrayToHexStr(mdDigest.data));

      })
    }
  }
}

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;
}
function 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中MD5算法出现的问题,以下提供一些可能的原因及解释:

首先,MD5算法本身具有确定性,即相同的输入值理应产生相同的输出值。如果在HarmonyOS中输入同样的值有时结果不同,这可能是由于代码实现中的某些特定条件或错误导致的。例如,字符编码问题、填充方式不正确、算法实现存在缺陷等。

其次,关于与第三方结果不同的问题,可能是由于不同平台或库在实现MD5算法时采用了不同的优化策略或实现方式。

最后,关于算法耗时较长的问题,MD5算法本身并不是一种高效的加密算法,其耗时性可能受到多种因素的影响,如硬件性能、输入数据的长度以及算法的具体实现方式等。

综上,为确保MD5算法的正确性和效率,建议仔细检查代码实现,并确保输入数据的编码和格式正确。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部