通过openssl生成sm2的公私钥的方法

在openssl中,支持sm2的公私钥的生成方法,不过其名称并不是sm2的字面意思,而是ec,

到openssl的apps文件夹下,输入命令如下所示:

./openssl ecparam -name secp160r2 -genkey

其中secp160r2是一个曲线的名称,我随便写的,通过-list_curves可以看到全部的名称,这里并不深入其中的含义,输出如下:

-----BEGIN EC PARAMETERS-----
BgUrgQQAHg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MFECAQEEFQBTKF92ysyn15Ip7NERfNsUgJAg5qAHBgUrgQQAHqEsAyoABKFexp90
7EBONi2jD9P5d9UtOFWBd6sZ2SA07lGlYul+IeEAWEa2cdc=
-----END EC PRIVATE 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 -name secp160r2 -genkey

可见输出如下:

-----BEGIN EC PARAMETERS-----
BgUrgQQAHg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MFECAQEEFQDjs+Ro3y+LQ/r6gbpq1VDh46WDjqAHBgUrgQQAHqEsAyoABIbbRyxs
HexWLM7rvX5qysdPL7o3nGUVNzBlj8tKpCCwHrXhmsJG/s8=
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MD4wEAYHKoZIzj0CAQYFK4EEAB4DKgAEhttHLGwd7FYszuu9fmrKx08vujecZRU3
MGWPy0qkILAeteGawkb+zw==
-----END PUBLIC KEY-----

在private key后面,可见产生了成对的public key.可用于sm2的加解密和签名验签了.

猜你喜欢

转载自blog.csdn.net/dong_beijing/article/details/81365060
sm2
今日推荐