Hmac采用SM3摘要算法传入自定义生成的key?

如题:Hmac采用SM3摘要算法传入自定义生成的key?

阅读 626
1 个回答

功能场景描述及使用场景

本文主要介绍使用Hmac采用SM3摘要算法传入自定义生成的key,获取结果。

  • 场景

可以传入自定义长度的key去获取mac结果。

使用的核心API

HMAC算法规格

开发步骤

核心代码解释

1.设置算法,通过接口createMac生成消息认证码操作实例。

2.接受输入对称密钥,通过接口init,初始化Mac。

3.接受数据,通过接口update,更新Mac,此步骤可重复。

4.通过接口doFinal,返回Mac计算结果。

5.将结果转换成十六进制。

核心代码如下:

import cryptoFramework from '@ohos.security.cryptoFramework';
import buffer from '@ohos.buffer';
 
 
@Entry
@Component
struct Hmac {
  @State message: string = 'Hello World';
 
 
  build() {
    Row() {
      Column() {
        Text("HELLO")
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            getHmac("zhpt_inner_test230300json88dd5e57e5eb1f962c3ae950492ebc21093da472844d18d4343accd2ecbdd258d6748f0eedb1b4349d9c4e65d6e778d26985c8c52ab688e39615f4eb4b48693327fd1bf076ba697598013e71cf50aee8b64f736f7c5fe771ce0ad9bde8e80e623ef17dc0db0d626c2a24ad70955a911a80b0efb4760b8a7b14fd5283b5896f1350e9fd6ef2aa29d11c5d779e364f9938939768fc981040155cc853886e0915243a6636d2b711159680a287cb815d4bf670b7ef8c64f5f3c0e78445ed17dfc7092b550222b72f49e834a7974e3918d14048f7c89c2cf42387ba226018bcc2547e7800107dbe540bea84d68602d53774f0d3f356b19e04267d146bb5151fdac678f136a3df9ce87c4f35b50658f58171395017f49f6d56b5af91b9be90d7e290c0558bd912b2be5688c4b7e41264a92e8017029533150963.2")
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}
 
// 可理解的字符串转成字节流
function stringToUint8Array(str: string) {
  let arr = new Uint8Array(str.length);
  for (let i = 0, j = str.length; i < j; ++i) {
    arr[i] = str.charCodeAt(i);
  }
  return arr;
}
 
async function getHmac(message:string){
 
  try {
    let macAlgName = "SM3";
    let mac =cryptoFramework.createMac(macAlgName)
    let arr = stringToUint8Array("30a86dc9056c44cc05420fec269270214bbb6914954e871e83771c9810ac1db0")
    let KeyBlob: cryptoFramework.DataBlob = {data:arr};
    let symKeyGenerator = cryptoFramework.createSymKeyGenerator("HMAC");
    const  symKey=await symKeyGenerator.convertKey(KeyBlob);
    await mac.init(symKey)
    await mac.update({data:stringToUint8Array(message)});
    let macOutpt= await mac.doFinal();
    const res=buffer.from(macOutpt.data).toString('hex');
    console.log("Hmac---:"+res);
  }catch (err){
    console.log("err:"+err)
  }
 
}

实现效果

适配的版本信息

  • IDE:DevEco Studio 4.1.1.300
  • SDK:HarmoneyOS 4.0.10.15
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进