HarmonyOS 鸿蒙Next SM2依据已有的字符串的私钥和公钥进行签名和验签

HarmonyOS 鸿蒙Next SM2依据已有的字符串的私钥和公钥进行签名和验签 当前为生成SM2公私钥并进行签名验签过程,是否有根据已有的SM2公私钥进行签名和验签的方法?

以及该SM2是否为标准的SM2,类似BC库的?

2 回复

根据已有的SM2公私钥进行签名和验签的方法是支持的,其中加密代码使用如下:

function encryptMessagePromise(publicKey:Uint8Array|string) {
  let publickKeyData = new Uint8Array();
  if(typeof publicKey === ‘string’){
    publickKeyData = stringToUint8Array(publicKey)
  } else{
    publickKeyData = publicKey;
  }

  // 创建 AsyKeyGenerator 实例。
  let sm2Generator = cryptoFramework.createAsyKeyGenerator(“SM2_256”);

  // 创建 Cipher 实例。
  let cipher = cryptoFramework.createCipher(“SM2_256|SM3”);

  // 使用 convertKey导入公钥或私钥获取密钥对。
  const publicKeyDataBlob:cryptoFramework.DataBlob = { data: publickKeyData };
  sm2Generator.convertKey(publicKeyDataBlob,null).then((sm2KeyPair: cryptoFramework.KeyPair): Promise<void> => {
    let pubKey = sm2KeyPair.pubKey;

    // 初始化 Cipher 实例并使用公钥对消息进行加密。
    return cipher.init(cryptoFramework.CryptoMode.ENCRYPT_MODE, pubKey, null);
  }).then(() => {

    // 加密
    let input: cryptoFramework.DataBlob = { data: stringToUint8Array(plan) };
    return cipher.doFinal(input);
  }).then(dataBlob => {

    // 获取加密数据。
    console.info("EncryptOutPut is " + dataBlob.data);
  });
}

当调用convertKey方法将外来二进制数据转换为算法库非对称密钥对象时,公钥应满足ASN.1语法、X.509规范、DER编码格式,私钥应满足ASN.1语法、PKCS#8规范、DER编码格式。

convertKey方法中,公钥和密钥二进制数据非必选项,可单独传入公钥或私钥的数据,生成对应只包含公钥或私钥的KeyPair对象。

更多关于HarmonyOS 鸿蒙Next SM2依据已有的字符串的私钥和公钥进行签名和验签的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,若要使用SM2算法依据已有的字符串形式的私钥和公钥进行签名和验签,你需要进行以下步骤,这些步骤通常涉及将字符串格式的密钥转换为可用于加密操作的密钥对象,然后利用这些对象进行签名和验签操作。

  1. 密钥转换

    • 将字符串形式的私钥和公钥转换为适合SM2算法使用的密钥对象。这通常涉及解析PEM或PKCS#8格式的密钥字符串,并转换为鸿蒙加密库能够识别的密钥格式。
  2. 签名

    • 使用转换后的私钥对象,调用鸿蒙提供的SM2签名API对指定数据进行签名。
  3. 验签

    • 使用转换后的公钥对象,调用鸿蒙提供的SM2验签API对签名进行验证。

请注意,鸿蒙系统可能提供了特定的API或库来处理SM2算法。你需要查阅鸿蒙的官方文档或API参考,找到正确的函数和方法来完成上述步骤。

由于鸿蒙系统的API和库可能随时间更新,建议直接参考最新的鸿蒙开发者文档或API指南,以确保使用正确的方法和函数。

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

回到顶部