首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读写OpenSSL文件的ECDSA密钥

读写OpenSSL文件的ECDSA密钥
EN

Stack Overflow用户
提问于 2016-07-08 15:03:25
回答 1查看 3K关注 0票数 3

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

代码语言:javascript
复制
#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是否有一个现有的功能来做到这一点?我没有首选键是否以任何格式编码,只要加载后我可以使用它。任何例子都是很好的。

EN

回答 1

Stack Overflow用户

发布于 2016-07-08 17:50:14

我想知道如何编写和加载PEM文件的密钥?openssl是否有一个现有的功能来做到这一点?

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

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

有关在带有输出的d2i_*程序中使用PEM_*PEM_*密钥的示例,请参见使用OpenSSL RSA密钥与.Net。您可以只是交换-在您的EC函数,以取代RSA的。

代码语言:javascript
复制
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键时,一定要通过调用EC_KEY_set_asn1_flag(ecKey, OPENSSL_EC_NAMED_CURVE)来使用命名曲线。如果你不这样做,那么这些钥匙的用处可能就有限了。还请参阅椭圆曲线密码学命名曲线上的OpenSSL wiki。

此外,您还忽略了来自EC_KEY_newEC_KEY_generate_key等函数的返回值。您可能需要重新考虑这种策略,因为这些功能可能会因为一些不明显的原因而失败,比如策略设置。还请参阅EC_KEY_new手册页。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38269867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档