HarmonyOS SM2 密钥生成怎么和其他平台对齐

使用系统创建的 SM2 私钥和公钥长度和其他平台生成的不一致。

需要生成公钥提供给其他平台如Java用于验签,私钥用于签名。同时也要用私钥来进行解密。

export function generateSM2Key(): Record<string, string | undefined> {
  // 创建一个AsyKeyGenerator实例
  let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256');
  // 使用密钥生成器随机生成非对称密钥对
  let keyPair = sm2Generator.generateKeyPairSync();
  let pubKey = keyPair.pubKey;
  let priKey = keyPair.priKey;
  // 获取非对称密钥对的二进制数据
  let pkBlob = pubKey.getEncoded();
  let skBlob = priKey.getEncoded();
  console.info('pk bin data' + pkBlob.data);
  console.info('sk bin data' + skBlob.data);
  let pubKeyBase64 = base64.encodeToStringSync(pkBlob.data);
  let priKeyBase64 = base64.encodeToStringSync(skBlob.data);
  let result: Record<string, string> = {};
  result["pubkey"] = pubKeyBase64;
  result["privatekey"] = priKeyBase64;
  return result;
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

使用下面代码即可:

let keypairGenerator = cryptoFramework.createAsyKeyGenerator("SM2_256")
let key = keypairGenerator.generateKeyPairSync();
let x = key.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_X_BN);
let y = key.pubKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_PK_Y_BN);
let sm2Key = x.toString(16)+y.toString(16)
console.log(sm2Key);
let sk = key.priKey.getAsyKeySpec(cryptoFramework.AsyKeySpecItem.ECC_SK_BN);
console.log("sm2Key===>"+sk.toString(16));
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 生成SM2密钥对报错
87浏览 • 1回复 待解决
HarmonyOS SM2密钥问题
27浏览 • 1回复 待解决
HarmonyOS SM2密钥对转换失败
679浏览 • 1回复 待解决
HarmonyOS Sm2DES加解密问题
512浏览 • 1回复 待解决
HarmonyOS 指定私钥生成SM2秘钥的方法
22浏览 • 1回复 待解决
HarmonyOS SM2数据签名
19浏览 • 1回复 待解决
HarmonyOS SM2/SM4结合加解密
26浏览 • 1回复 待解决
HarmonyOS SM2加密算法
18浏览 • 1回复 待解决
HarmonyOS sm2验签失败
76浏览 • 1回复 待解决
huks sm2签名验签失败
252浏览 • 1回复 待解决
HarmonyOS SM2公钥PEM读取接口
18浏览 • 1回复 待解决
HarmonyOS SM2加签验签SM3摘要算法使用
519浏览 • 1回复 待解决
HarmonyOS SM2SM4国密加解密使用demo
304浏览 • 1回复 待解决
HarmonyOS 国密SM2转换公钥失败
32浏览 • 1回复 待解决
如何使用国密SM2算法进行加解密
4457浏览 • 1回复 待解决