HarmonyOS 鸿蒙Next SM 2 字符串转化 pubKey对象报错

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next SM 2 字符串转化 pubKey对象报错
Demo:

const pubKeyString = 'xxxxx'

async sm2GenKeyPairByData(pubKeyString: string) {
    let pubKeyBlob: cryptoFramework.DataBlob = {
      data: this.hexStrToBytes(pubKeyString)
    };
    let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2');
    try {
      let keyPair = await sm2Generator.convertKey(pubKeyBlob, null);
      console.info('convertKey success');
      return keyPair
    }catch (e){
      console.log(e)
    }
    return null
  }


  hexStrToBytes(hexStr: string): Uint8Array {
    let len = hexStr.length
    if (len % 2 != 0) {
      hexStr = "0" + hexStr
    }

    const byteArray = new Array<number>()
    for (let i = 0; i < hexStr.length; i += 2) {
      byteArray.push(parseInt(hexStr.substring(i, i + 2), 16))
    }
    return new Uint8Array(byteArray)
  }
}

报错 401 create c generator fail ,我需要把我在GMObjC 生成的公钥转化为鸿蒙的pubKey 对象


更多关于HarmonyOS 鸿蒙Next SM 2 字符串转化 pubKey对象报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

尝试使用以下方法生成:

pubKey:async convertStrToPubKey(keyStr: string): Promise<cryptoFramework.PubKey> {
  let pubKeyStr = keyStr.startsWith("04") ? keyStr.slice(2) : keyStr
  let pkPart1 = pubKeyStr.slice(0, pubKeyStr.length / 2)
  let pkPart2 = pubKeyStr.slice(pubKeyStr.length / 2)
  let pk: cryptoFramework.Point = {
    x: BigInt("0x" + pkPart1),
    y: BigInt("0x" + pkPart2),
  }
  let pubKeySpec: cryptoFramework.ECCPubKeySpec = {
    params: cryptoFramework.ECCKeyUtil.genECCCommonParamsSpec('NID_sm2'),
    pk: pk,
    algName: "SM2",
    specType: cryptoFramework.AsyKeySpecType.PUBLIC_KEY_SPEC
  }
  let keypairGenerator = cryptoFramework.createAsyKeyGeneratorBySpec(pubKeySpec)
  return await keypairGenerator.generatePubKey()
}

更多关于HarmonyOS 鸿蒙Next SM 2 字符串转化 pubKey对象报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next SM 2算法库对于字符串到公钥对象的转换报错,通常可能由以下几个原因引起:

  1. 字符串格式错误:确保输入的字符串是符合SM2公钥标准的PEM或DER格式。如果格式不正确,解析时会报错。

  2. 编码问题:字符串在传输或存储过程中可能因编码不一致导致数据损坏,确保编码(如Base64)在转换前后保持一致。

  3. 库版本或依赖问题:检查所使用的Next SM 2算法库是否为最新版本,或是否存在与其他系统库的兼容性问题。

  4. API使用不当:确认API调用参数正确,包括输入字符串的指针、长度等,确保没有越界或空指针访问。

  5. 内存管理:在转换过程中,内存分配和释放需正确管理,避免内存泄漏或非法访问。

针对上述问题,检查并修正输入字符串、编码方式、库版本及API调用方式。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。通过官方渠道获取更专业的技术支持。

回到顶部