前言
1. OpenSSL产生ECC密钥对
openssl ecparm -name <curve_name> -genkey -out <private_key_file>
其中:
- <curve_name> 是椭圆曲线名称,例如primev1、secp384r1、secp256r1等。
- <private_key_file> 是要生成的私钥文件的路径和文件名称。
例如:要生成primate256v1曲线的ECC密钥对病将私钥保存到名为private_ecc_key的文件中,可以使用一下命令:
openssl ecparm -name prime256v1 -genkey -out private_ecc_key
该命令会生成一个ECC私钥文件,并基于所选的曲线生成相应的公钥。
2. 从产生的ECC私钥文件中提取相应的ECC公钥
openssl ec -in <private_key_file> -pubout -out <public_key_file>
其中:
- <private_key_file> 是先前生成的私钥文件的路径和文件名称。
- <private_key_file> 是要保存的公钥文件的路径和文件名称。
例如:要从名为private_ecc_key的私钥文件中提取公钥并保存到public_ecc_key文件中,可以使用一下命令:
openssl ec -in private_ecc_key -pubout -out public_ecc_key
这样就在当前的工作目录中生成了一个ECC的私钥文件和相应的公钥文件。
举个栗子
1. 产生椭圆曲线为PRIME256V1(SECP256R1)的ECC密钥对
# 产生ECC私钥, 曲线prime256v1(SECP256R1)
openssl ecparm -name prime256v1 -genkey -out ecc_secp256r1_private_key.pem -noout
# 产生ECC公钥
openssl ec -in ecc_secp256r1_private_key.pem -pubout -out ecc_secp256r1_public_key.pem# ============> 私钥格式转换 <============
# 私钥PKCS1转为PKCS8格式
openssl pkcs8 -topk8 -in ecc_secp256r1_private_key.pem -out pkcs8_ecc_secp256r1_private_key.pem -nocrypt
# 私钥PKCS8转PKCS1格式
openssl ec -in pkcs8_ecc_secp256r1_private_key.pem -out pkcs1_ecc_secp256r1_private_key.pem
2. 产生椭圆曲线为SECP256K1的ECC密钥对
# 产生ECC私钥, 曲线SECP256K1
openssl ecparm -name secp256k1 -genkey -out ecc_secp256k1_private_key.pem -noout
# 产生ECC公钥
openssl ec -in ecc_secp256k1_private_key.pem -pubout -out ecc_secp256k1_public_key.pem# ============> 私钥格式转换 <============
# 私钥PKCS1转为PKCS8格式
openssl pkcs8 -topk8 -in ecc_secp256k1_private_key.pem -out pkcs8_ecc_secp256k1_private_key.pem -nocrypt
# 私钥PKCS8转PKCS1格式
openssl ec -in pkcs8_ecc_secp256k1_private_key.pem -out pkcs1_ecc_secp256k1_private_key.pem