http://www.iteedu.com/topic/crypto/openssleckey.htm
首先要查看支持哪些椭圆曲线:
openssl ecparam -list_curves
比方说比特币用的secp256k1
就支持。
生成私钥
openssl ecparam -genkey -name secp256k1 -out priv.key
文件内容:
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIENdSGdz4PmGgMrYi+2l0THNMlod3hPkjvWBwwjgcMF2oAcGBSuBBAAK
oUQDQgAEXmPFJ8ek49mva3huqmLLAIJMI0PjtNGmVPRw3mQwfVjDRW0VlFhQmsqX
qkD1iDnzgsDtYaIIv7lmTY2APgBwAg==
-----END EC PRIVATE KEY-----
BgUrgQQACg==
是椭圆曲线的关键参数,对应secp256k1
标识。
用secp256k1
生成私钥每次私钥是不同的,但EC PARAMETERS
都是相同的。
只有用不同的name指定不同曲线EC PARAMETERS
才会不同。
因为私钥可以生成公钥,要用到曲线,所以要将曲线的标识写到密钥文件里。
生成公钥
openssl ec -in priv.key -pubout -out pub.key
文件内容:
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEXmPFJ8ek49mva3huqmLLAIJMI0PjtNGm
VPRw3mQwfVjDRW0VlFhQmsqXqkD1iDnzgsDtYaIIv7lmTY2APgBwAg==
生成的应该是非压缩格式的公钥。