【HarmonyOS NEXT】HUKS生成SM2密钥对,后端无法通过ConvertX509ToECPublicKey来提取公钥,提示长度不对

【关键字】

SM2 / HUKS / 长度不对 / ConvertX509ToECPublicKey / 提取公钥

【问题描述】

App需要使用密钥库生成SM2密钥,对数据进行签名,然后把SM2公钥传送给服务端,服务端使用公钥进行验签,但服务端解析公钥失败。

密钥库(HUKS)生成SM2密钥对,导出公钥(x509)是92字节,我们的后端无法通过ConvertX509ToECPublicKey来提取公钥,提示长度不对如下图所示。

cke_522.png

但用加解密算法框架生成的SM2公钥长度91字节如下图所示,是可以提取的。

cke_913.png

提取密钥库公钥代码如下:

public static CreateKeyTest() {
let keyAlias = "sm2KeyTest"
//================option============================//
let properties: Array<huks.HuksParam> = new Array();
properties[0] = {
tag: huks.HuksTag.HUKS_TAG_ALGORITHM,
value: huks.HuksKeyAlg.HUKS_ALG_SM2
};
properties[1] = {
tag: huks.HuksTag.HUKS_TAG_KEY_SIZE,
value: huks.HuksKeySize.HUKS_SM2_KEY_SIZE_256
};
properties[2] = {
tag: huks.HuksTag.HUKS_TAG_PURPOSE,
value: huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_SIGN | huks.HuksKeyPurpose.HUKS_KEY_PURPOSE_VERIFY
};
let options: huks.HuksOptions = {
properties: properties
}
//================option============================//
huks.generateKeyItem(keyAlias, options, (error, data) => {
if (!error) {
huks.exportKeyItem(keyAlias, options).then((data) => {
let huksPubKey = data.outData as Uint8Array;
let base64 = new util.Base64Helper();
let result = base64.encodeToStringSync(huksPubKey);
})
}
});
}

【解决方案】

加解密算法框架生成秘钥是ECC格式的,秘钥库生成的秘钥是SM2格式的。当前使用的ConvertX509ToECPublicKey方法不支持SM2格式的。

建议直接使用加密算法框架的,或者将秘钥库生成的秘钥格式转成ECC的来解决此问题。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值