我想要生成一个ecdsa密钥对并将其保存到PEM文件中。这是我生成密钥的代码。
#include <openssl/ec.h> // for EC_GROUP_new_by_curve_name, EC_GROUP_free, EC_KEY_new, EC_KEY_set_group, EC_KEY_generate_key, EC_KEY_free #include <openssl/ecdsa.h> // for ECDSA_do_sign, ECDSA_do_verify #include <openssl/obj_mac.h> // for NID_secp256k1 * Function generate_eckey * ----------------------- * This function generates an EC_Key object that stores the ECDSA key pair. * return: ec key pair EC_KEY * generate_eckey() { EC_KEY *eckey=EC_KEY_new(); EC_GROUP *ecgroup= EC_GROUP_new_by_curve_name(NID_secp256k1); EC_KEY_set_group(eckey, ecgroup); EC_KEY_generate_key(eckey); return eckey; int main() { // generate a eckey used to produce signatures EC_KEY *eckey = generate_eckey(); return 0; }
现在我有了这个密钥对,可以用来对消息进行签名和验证。我想要做的是将信息保存到一个文件中,所以下次我可以简单地加载并使用它。
我想知道如何编写和加载PEM文件的密钥?openssl是否有一个现有的功能来做到这一点?我没有首选键是否以任何格式编码,只要加载后我可以使用它。任何例子都是很好的。
上云精选
2核2G云服务器 每月9.33元起,个人开发者专属3年机 低至2.3折
我想知道如何编写和加载PEM文件的密钥?openssl是否有一个现有的功能来做到这一点?
是的,OpenSSL有现有的功能。对于ASN.1/DER,使用 d2i_ECPrivateKey 和 d2i_EC_PUBKEY ;对于PEM,使用 PEM_read_ECPrivateKey 和 PEM_read_EC_PUBKEY 。编写函数类似,并记录在手册页中。
d2i_ECPrivateKey
d2i_EC_PUBKEY
PEM_read_ECPrivateKey
PEM_read_EC_PUBKEY
d2i_* 是“到内部的”,它用于读取ASN.1/DER键。写函数使用 i2d_* 及其“内部to DER”。PEM不使用神秘前缀。
d2i_*
i2d_*
有关在带有输出的 d2i_* 程序中使用 PEM_* 和 PEM_* 密钥的示例,请参见 使用OpenSSL RSA密钥与.Net 。您可以只是交换-在您的EC函数,以取代RSA的。
PEM_*
EC_KEY * generate_eckey() { EC_KEY *eckey=EC_KEY_new();