HarmonyOS 鸿蒙Next上生成的SM2密钥无法在后台使用

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

HarmonyOS 鸿蒙Next上生成的SM2密钥无法在后台使用

使用鸿蒙系统创建的 SM2 密钥无法在后台使用
对请求接口部分参数进行 SM2 加签操作,同时将鸿蒙系统生成的 SM2 公钥传递给后台。
后台获取到公钥后,对接口参数进行验签,报密钥长度错误。

测试了将鸿蒙生成的 SM2 密钥替换成 iOS 或 Android 上创建的 SM2 密钥,接口加验签功能是正常的。
export function generateSM2Key(): Record<string, string | undefined> {
// 创建一个AsyKeyGenerator实例
let sm2Generator = cryptoFramework.createAsyKeyGenerator(‘SM2_256’);
// 使用密钥生成器随机生成非对称密钥对
let keyPair = sm2Generator.generateKeyPairSync();

let pubX = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN); let pubY = keyPair.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN); let pubKey = pubX.toString(16)+pubY.toString(16); console.info(‘pubKey’ + pubKey); let pri = keyPair.priKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_SK_BN); let priKey = pri.toString(16); console.info(‘priKey’ + priKey); let pubKeyBase64 = base64.encodeToStringSync(HexStrTouint8Array(pubKey)); let priKeyBase64 = base64.encodeToStringSync(HexStrTouint8Array(priKey)); let result: Record<string, string> = {}; result[“publicKey”] = pubKeyBase64; result[“privateKey”] = priKeyBase64; return result; }

5 回复
在生成十六进制字符串格式的公钥的时候 “let pubKey = C1x+C1y” ,在首位添加“04”,然后再处理其他业务
我这边使用三方库解决了 [@yyz116](/user/yyz116)/sm-crypto

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

针对HarmonyOS 鸿蒙Next上生成的SM2密钥无法在后台使用的问题,这通常是由于密钥格式或加密方式不兼容所导致的。

首先,确认后台系统是否支持SM2算法,以及是否对密钥格式有特定要求。由于安卓和HarmonyOS的SM2密文、密钥格式可能不符,直接使用时需要一定的转换。例如,公钥可能需要从带“04”的十六进制字符串转换为不带“04”的格式,或者私钥需要直接以十六进制字符串形式放入对应参数。

其次,检查加密过程中使用的填充模式和摘要算法是否与后台系统一致。不同的填充模式和摘要算法可能会导致解密失败。

如果以上步骤均确认无误,但问题依旧存在,可能是由于HarmonyOS鸿蒙Next系统或框架层面的bug。此时,建议尝试更新HarmonyOS SDK和依赖库至最新版本,并重新配置开发环境。

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

回到顶部