export function generateSM2Key() {
let sm2Generator = cryptoFramework.createAsyKeyGenerator('SM2_256');
// 使用密钥生成器随机生成非对称密钥对
let keyGenPromise = sm2Generator.generateKeyPair();
keyGenPromise.then(keyPair => {
let pubKey = keyPair.pubKey;
let priKey = keyPair.priKey;
// 获取非对称密钥对的二进制数据
let pkBlob = pubKey.getEncoded();
let skBlob = priKey.getEncoded();
console.info('pk bin data' + pkBlob.data.length);
console.info('sk bin data' + skBlob.data);
});
}
如上生成的公私钥长度为91位,与服务端及其他客户端不能通用,有什么办法能转成通用的公私钥对?
这个是由于openssl底层返回的数据直接透传返回的,中间不作任何操作是为了防止数据在拼接的时候被截取到,保证安全性。openssl底层返回的数据规范是高位是0的情况下默认不显示,即在返回的时候需要业务实现下,x、y的长度是固定的64长度即32字节,判断是否满足进行首位高位补0即可,修改后代码如下,在生成公钥的时候,需要做补位判断: