HarmonyOS HmacSHA256算法?

当前业务需要使用HmacSHA256编码,根据文档开发

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/crypto-compute-mac-V5\#开发步骤

发现此算法针对不同文本得到的加密值相同,希望提供有效HmacSHA256编码

附其他系统实现:

public static String hmac(String msg, String secret) {
  String hash = "";
  try {
    Mac sha256mac = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(),"HmacSHA256");
    sha256mac.init(secretKey);

    hash = HexUtils.toHexString(sha256mac.doFinal(msg.getBytes()));
  } catch (NoSuchAlgorithmException | InvalidKeyException e) {
    e.printStackTrace();
  }
  return hash;
}
阅读 652
1 个回答

请参考示例如下:

async function calculateHmacSHATest() {
  try {
    let macAlgName = "SHA256";
    let key = "02391723418924666645";
    let keyBytes = stringToUint8Array("abccba");
    let message = "aabbccddee112233ffgghh";
    let dataBytes = stringToUint8Array(message);
    let symKey = await cryptoFramework.createSymKeyGenerator("HMAC").convertKey({ data: keyBytes });
    let mac = cryptoFramework.createMac(macAlgName);
    await mac.init(symKey);
    await mac.update({ data: dataBytes });
    let macOutput = await mac.doFinal();
    let str = uint8ArrayToHexStr(macOutput.data)
    console.info("[ETS HMAC]: result bytes : " + macOutput.data);
    console.info("[ETS HMAC]: result string : " + str);
  } catch (err) {
    console.error(err)
  }
}

// 字符串转成字节流
export function stringToUint8Array(str: string) {
  return new Uint8Array(buffer.from(str, 'utf-8').buffer);
}

//Uint8Array转十六进制
export function uint8ArrayToHexStr(data: Uint8Array): string {
  return buffer.from(data).toString('hex');
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进