我希望能够在命令行中使用openssl生成密钥对私钥和公钥,但我不确切知道如何操作。到目前为止我所做的是执行以下命令行,但这只打印了我这个我不确切知道它是什么:s
FROM OPENSSL PAGE:使用显式参数创建EC参数:
openssl ecparam -out ec_param.pem -name prime192v1 -param_enc explicit
-----BEGIN EC PARAMETERS-----
MIHHAgEBMCQGByqGSM49AQECGQD////////////////////+//////////8wSwQY
/////////////////////v/////////8BBhkIQUZ5ZyA5w+n6atyJDBJ/rje7MFG
ubEDFQAwRa5vyEIvZO1XlSjTgSDq4SGW1QQxBBiNqA6wMJD2fL8g60OhiAD0/wr9
gv8QEgcZK5X/yNp4YxAR7WskzdVz+XehHnlIEQIZAP///////////////5ne+DYU
a8mxtNIoMQIBAQ==
-----END EC PARAMETERS-----
有人可以告诉我如何得到这样的东西:
//-----------------Generated Key Pair----------------------------------//
char privkey[]=
"-----BEGIN EC PARAMETERS-----\n"
"BgUrgQQACQ==\n"
"-----END EC PARAMETERS-----\n"
"-----BEGIN EC PRIVATE KEY-----\n"
"MFACAQEEFI9sfpfTk0YlZx8JaCZnLsy4T6HYoAcGBSuBBAAJoSwDKgAEIlzYflxD\n"
"0396M0i6dGfSY3khTU7kiNyEv/B1EoyGmqvH7tjhSmpP1A==\n"
"-----END EC PRIVATE KEY-----\n";
char pubkey[] =
"-----BEGIN PUBLIC KEY-----\n"
"MD4wEAYHKoZIzj0CAQYFK4EEAAkDKgAEIlzYflxD0396M0i6dGfSY3khTU7kiNyE\n"
"v/B1EoyGmqvH7tjhSmpP1A==\n"
"-----END PUBLIC KEY-----\n";
//---------------------------------------------------------------------//
我从我上网的代码中得到了这个,它使用这个密钥对用ECDSA签名消息,但现在我希望能够生成我自己的密钥对(来自openssl命令行)并在代码中使用它这个,为我改变这个密钥对。
在我的情况下,我想使用NIST P225,即“prime256v1”。
有人可以帮助我吗?
谢谢,最诚挚的问候
答案 0 :(得分:2)
私钥
假设使用UX平台,例如OS X或Linux。在测试时也忽略$。生成私有ECDSA密钥:
$ openssl ecparam -name prime256v1 -genkey -noout -out private.ec.key
使用密码短语转换和加密私钥:
$ openssl pkcs8 -topk8 -in private.ec.key -out private.pem
现在,只要您记住密码,就可以安全地删除private.ec.key
。
公钥
生成公共ECDSA密钥:
$ openssl ec -in private.pem -pubout -out public.pem
测试
制作一个小的文本文件进行测试:
$ touch msg.txt | echo "hello world" > msg.txt
进行哈希摘要:
$ openssl dgst -sha256 -out msg.digest.txt msg.txt
从摘要中提取签名文件:
$ openssl dgst -sha256 -sign private.pem -out msg.signature.txt msg.digest.txt
验证签名:
$ openssl dgst -sha256 -verify public.pem -signature msg.signature.txt msg.digest.txt
此外,您可能希望在邮寄签名之前将签名编码为base64,然后将其解码为bin,然后在收到后进行验证。
这是您的操作方式:
编码:
$ openssl base64 -in msg.signature.txt -out msg.base64.sig.txt
解码:
$ openssl base64 -d -in msg.base64.sig.txt -out msg.signature.txt