通过openssl生成sm2的公私钥的方法
在openssl中,支持sm2的公私钥的生成方法,不过其名称并不是sm2的字面意思,而是ec,
到openssl的apps文件夹下,输入命令如下所示:
./openssl ecparam -genkey -name SM2 -out priv.key
其中SM2是一个曲线的名称,符合国密算法要求,通过-list_curves可以看到全部的名称,这里并不深入其中的含义,输出如下:
这里可见模型的参数,和私钥,那么公钥如何产生呢,
标准的方法是:
./openssl ec -in priv.key -pubout -out pub.key
如果需要生成完成的公私钥,可以添加一行代码实现.
在ecparam.c中,429行,在PEM_write_bio_ECPrivateKey后面,添加PEM_write_bio_EC_PUBKEY,就可以了.
如下所示
if (outformat == FORMAT_ASN1) i = i2d_ECPrivateKey_bio(out, eckey); else { i = PEM_write_bio_ECPrivateKey(out, eckey, NULL, NULL, 0, NULL, NULL); i = PEM_write_bio_EC_PUBKEY(out, eckey); }
然后再make一下,再次运行
./openssl ecparam -genkey -name SM2 -out all.key
可见输出如下:
在private key后面,可见产生了成对的public key.可用于sm2的加解密和签名验签了.
下一篇:
国密SM2算法加解密文件