HarmonyOS 鸿蒙Next SM 2 字符串转化 pubKey对象报错
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
尝试使用以下方法生成:
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算法库对于字符串到公钥对象的转换报错,通常可能由以下几个原因引起:
-
字符串格式错误:确保输入的字符串是符合SM2公钥标准的PEM或DER格式。如果格式不正确,解析时会报错。
-
编码问题:字符串在传输或存储过程中可能因编码不一致导致数据损坏,确保编码(如Base64)在转换前后保持一致。
-
库版本或依赖问题:检查所使用的Next SM 2算法库是否为最新版本,或是否存在与其他系统库的兼容性问题。
-
API使用不当:确认API调用参数正确,包括输入字符串的指针、长度等,确保没有越界或空指针访问。
-
内存管理:在转换过程中,内存分配和释放需正确管理,避免内存泄漏或非法访问。
针对上述问题,检查并修正输入字符串、编码方式、库版本及API调用方式。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。通过官方渠道获取更专业的技术支持。