gpt4 book ai didi

c - 读取 OpenSSL ECDSA key 并将其写入 PEM 文件

转载 作者:行者123 更新时间:2023-12-02 00:09:10 28 4
gpt4 key购买 nike

我想生成一个ecdsa key 对并将其保存到PEM文件。这是我生成 key 的代码。

#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;
}

现在我有了这个 key 对,可用于签名和验证消息。我想要做的是将信息保存到文件中,以便下次我可以简单地加载它并使用它。

我想知道如何写入 key 并将其加载到 PEM 文件中? openssl 有现有的函数可以做到这一点吗?我不喜欢 key 是否以任何格式编码,只要加载后我可以使用它。任何例子都很好。

最佳答案

I want to know how can I write and load the keys to a PEM file? Does openssl have an existing function to do so?

是的,OpenSSL 已有功能。对于 ASN.1/DER,请使用 d2i_ECPrivateKeyd2i_EC_PUBKEY ;并用于 PEM PEM_read_ECPrivateKeyPEM_read_EC_PUBKEY 。写入函数类似并在手册页中进行了记录。

d2i_* 是“DER 到内部”,它用于读取 ASN.1/DER key 。写入函数使用 i2d_* 及其“DER 内部”。 PEM 不使用神秘的前缀。

有关在 C++ 程序中使用 d2i_*PEM_* 与 RSA key 及其输出的示例,请参阅 Use OpenSSL RSA key with .Net 。您只需将 EC 函数替换为 RSA 函数即可。

<小时/>
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;
}

相关的是,当您编写 EC key 时,请务必通过调用EC_KEY_set_asn1_flag(ecKey, OPENSSL_EC_NAMED_CURVE) 使用命名曲线。如果不这样做,那么 key 的用途可能会受到限制。另请参阅Elliptic Curve Cryptography | Named Curves在 OpenSSL wiki 上。

此外,您还忽略了 EC_KEY_newEC_KEY_generate_key 等函数的返回值。您可能需要重新考虑该策略,因为这些功能可能会因非显而易见的原因(例如策略设置)而失败。另请参阅EC_KEY_new手册页。

关于c - 读取 OpenSSL ECDSA key 并将其写入 PEM 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38269867/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com