HarmonyOS鸿蒙Next中怎么使用自己的私钥进行SM2签名

HarmonyOS鸿蒙Next中怎么使用自己的私钥进行SM2签名 后端下发SM2 私钥,客户端需进行SM2签名,怎么使用自己的私钥进行SM2签名(后端不会返回公钥)

3 回复

可以通过参数生成私钥,对数据进行签名,私钥只能用来签名。

async function genSM2PriKey() {
  let sm2CommonParamsSpec = cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_sm2');
  let sm2KeyPairSpec: cryptoFramework.ECCPriKeySpec = {
    algName: "SM2",
    specType: cryptoFramework.AsyKeySpecType.PRIVATE_KEY_SPEC,
    params: sm2CommonParamsSpec,
    sk: BigInt('0x6330B599ECD23ABDC74B9A5B7B5E00E553005F72743101C5FAB83AEB579B7074'),
  };
  let generatorBySpec = cryptoFramework.createAsyKeyGeneratorBySpec(sm2KeyPairSpec);
  let prk = await generatorBySpec.generatePriKey()
  return prk;
}

let input1: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan1", 'utf-8').buffer) };
let input2: cryptoFramework.DataBlob = { data: new Uint8Array(buffer.from("This is Sign test plan2", 'utf-8').buffer) };

async function doSign() {
  let signMessageBlob: cryptoFramework.DataBlob;
  let signer = cryptoFramework.createSign("SM2|SM3");
  try {
    signer.setSignSpec(cryptoFramework.SignSpecItem.SM2_USER_ID_UINT8ARR, stringToUint8Array('123'))
  } catch (e) {
    console.error("设置签名参数error = " + e);
  }
  let prk = await genSM2PriKey()
  await signer.init(prk);
  await signer.update(input1); // 如果明文较短,可以直接调用verify接口一次性传入
  let signData = await signer.sign(input2);
  console.info("sign result is " + signData.data);
}

更多关于HarmonyOS鸿蒙Next中怎么使用自己的私钥进行SM2签名的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用自己的私钥进行SM2签名可以通过SM2Crypto类实现。首先,确保你已经导入了ohos.security.crypto模块。以下是具体步骤:

  1. 导入模块

    import { SM2Crypto } from 'ohos.security.crypto';
    
  2. 初始化SM2Crypto对象

    let sm2Crypto = new SM2Crypto();
    
  3. 设置私钥

    let privateKey = '你的私钥';
    sm2Crypto.setPrivateKey(privateKey);
    
  4. 进行签名

    let data = '需要签名的数据';
    let signature = sm2Crypto.sign(data);
    console.log('签名结果:', signature);
    

以上代码展示了如何在HarmonyOS鸿蒙Next中使用自己的私钥进行SM2签名。SM2Crypto类提供了setPrivateKey方法用于设置私钥,sign方法用于生成签名。确保私钥和数据格式正确,否则签名可能失败。

在HarmonyOS鸿蒙Next中,使用私钥进行SM2签名可以通过cryptoFramework模块实现。首先,使用createAsyKeyGenerator生成SM2密钥对,然后通过createSign创建签名实例,使用私钥初始化签名实例,最后调用updatesign方法进行数据签名。具体步骤包括生成密钥对、创建签名实例、初始化和签名操作。

回到顶部