同时从OpenSSL生成EC密钥对

同时从OpenSSL生成EC密钥对,openssl,Openssl,我想创建一个EC私钥和一个公钥,并将它们保存在一个文件中。我可以通过以下方式创建私钥: openssl ecparam -genkey -name prime256v1 -noout -out ec256-key-pair.pem 但是像这样,文件只包含私钥。是否有一个参数,openSSL会同时创建两个密钥 我想要一个如下所示的文件: -----BEGIN EC PARAMETERS----- BgUrgQQACg== -----END EC PARAMETERS----- -----BEGI

我想创建一个EC私钥和一个公钥,并将它们保存在一个文件中。我可以通过以下方式创建私钥:

openssl ecparam -genkey -name prime256v1 -noout -out ec256-key-pair.pem
但是像这样,文件只包含私钥。是否有一个参数,openSSL会同时创建两个密钥

我想要一个如下所示的文件:

-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIKMPbg+xGGkig+N+lLzCJ9mJ019yqicZezlbF3IeuQkUoAcGBSuBBAAK
oUQDQgAEor2P+NfmQDuS7mcSVGp6b4AiMXkwlKayJcOLMFjovue1ZsUjMIbw53P3
AF5+G6N0arUq+9tT87a+TTRwxiXYqA==
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE///n/cRdxm49shZtjnrQxnemfJgF
A8UVjNyXtShULmgOJOQh7E9yZfomLkFj0FVkd1M9g7hfL+DO3Utl61kJcg==
-----END PUBLIC KEY-----
但是像这样,文件只包含私钥

文件
ec256 key pair.pem
实际上包括密钥对的私有部分和公共部分。您可以通过使用
openssl ec
命令打印其内容来验证:

$ openssl ec -in ec256-key-pair.pem -noout -text
read EC key
Private-Key: (256 bit)
priv:
    a3:0f:6e:0f:b1:18:69:22:83:e3:7e:94:bc:c2:27:
    d9:89:d3:5f:72:aa:27:19:7b:39:5b:17:72:1e:b9:
    09:14
pub:
    04:a2:bd:8f:f8:d7:e6:40:3b:92:ee:67:12:54:6a:
    7a:6f:80:22:31:79:30:94:a6:b2:25:c3:8b:30:58:
    e8:be:e7:b5:66:c5:23:30:86:f0:e7:73:f7:00:5e:
    7e:1b:a3:74:6a:b5:2a:fb:db:53:f3:b6:be:4d:34:
    70:c6:25:d8:a8
ASN1 OID: secp256k1
事实上,您可以看到它还包含曲线标识符

我想要一个如下所示的文件:

-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIKMPbg+xGGkig+N+lLzCJ9mJ019yqicZezlbF3IeuQkUoAcGBSuBBAAK
oUQDQgAEor2P+NfmQDuS7mcSVGp6b4AiMXkwlKayJcOLMFjovue1ZsUjMIbw53P3
AF5+G6N0arUq+9tT87a+TTRwxiXYqA==
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE///n/cRdxm49shZtjnrQxnemfJgF
A8UVjNyXtShULmgOJOQh7E9yZfomLkFj0FVkd1M9g7hfL+DO3Utl61kJcg==
-----END PUBLIC KEY-----
尽管有上述信息,如果您仍然需要此功能,可以使用
openssl ec
命令提取这三个不同的部分。参数使用选项
-param_out
,私钥(实际上包括公共部分)不使用选项,
-pubout
仅用于公共部分

$ openssl ec -in ec256-key-pair.pem -param_out > result.txt
$ openssl ec -in ec256-key-pair.pem >> result.txt
$ openssl ec -in ec256-key-pair.pem -pubout >> result.txt
这样,
result.txt
将包含您要求的内容。对于一行中的所有内容,如您所要求的:

$ KEY_PEM=$(openssl ecparam -genkey -name prime256v1 -noout) && for OPTION in -param_out "" -pubout; do openssl ec -in <(echo "${KEY_PEM}") ${OPTION}; done > result.txt
$KEY\u PEM=$(openssl ecparam-genkey-name prime256v1-noout)和&for-OPTION-in-param\u out”“-pubout;执行openssl ec-in result.txt

(假设您使用的是
bash
作为shell)

openssl ec-in ec256-key-pair.pem-pubout-text如果可能的话,我希望两个密钥都在同一个文件中。是的,可能,使用shell脚本。这非常有效。不使用中间文件也可以一次完成所有工作吗?实际上,我把这个从C++程序中称为外部过程,并希望捕获输出。如果我只需要调用一个进程就可以捕获私钥和公钥,那就太好了。或者有一个C++库,我可以用这个。对于这些愚蠢的问题,我很抱歉,但我以前从未使用过openSSL。我添加了一个单行程序,但没有验证如果从应用程序调用此shell命令,它是否有效。除了使用<代码> OpenSSL 工具外,还可以使用其<代码>密码> /COD>库从C++应用程序中编程。你可以通过阅读和/或检查来学习如何做到这一点。这很好。但是我知道我在玩OpenSSL库。我现在可以创建密钥对了。我在原始问题中发布了代码。很好,这似乎是一个更好的方法。既然你新问题的性质不同,你应该把它当作一个新问题来提出。我在这里发布了新问题: