分离ECDSA密钥对的公钥和私钥

托德

我正在使用c ++尝试从OpenSSL Wiki生成Elliptic_Curve_Cryptography之后的ECDSA密钥对

#include <iostream>

#include <openssl/obj_mac.h>
#include <openssl/ec.h>

int main()
{
    EC_KEY *key;

    if(NULL == (key = EC_KEY_new_by_curve_name(NID_secp224r1)))
        std::cout << "error on new_curve_by_name" << std::endl;

    if(1 != EC_KEY_generate_key(key)) std::cout << "error in generating keys" << std::endl;
}

生成的密钥对没有错误,但是我不知道如何在两个不同的对象(EC_POINT和BIGNUM)中提取公钥和私钥,知道吗?

加利克

我认为您想要的方法是:

EC_KEY_get0_private_keyEC_KEY_get0_public_key

这对我有用:

EC_KEY* key = EC_KEY_new_by_curve_name(NID_secp224r1);

if(!key)
{
    std::cerr << "Error creating curve key" << '\n';
    return EXIT_FAILURE;
}

if(!EC_KEY_generate_key(key))
{
    std::cerr << "Error generating curve key" << '\n';
    EC_KEY_free(key);
    return EXIT_FAILURE;
}

BIGNUM const* prv = EC_KEY_get0_private_key(key);
if(!prv)
{
    std::cerr << "Error getting private key" << '\n';
    EC_KEY_free(key);
    return EXIT_FAILURE;
}

std::cout << "Private key: " << prv << '\n';

EC_POINT const* pub = EC_KEY_get0_public_key(key);
if(!pub)
{
    std::cerr << "Error getting public key" << '\n';
    EC_KEY_free(key);
    return EXIT_FAILURE;
}

std::cout << "Public key: " << pub << '\n';

// Use keys here ...

EC_KEY_free(key);

注意:

当使用这样的C库时,我经常定义一个自定义的智能指针来小心删除。这使代码不太容易发生内存泄漏和“异常安全”。

例如,我将定义如下内容:

struct ec_key_dter{void operator()(EC_KEY* k)const{if(k) EC_KEY_free(k);}};
using  ec_key_uptr = std::unique_ptr<EC_KEY, ec_key_dter>;

并像这样使用它:

auto key = ec_key_uptr(EC_KEY_new_by_curve_name(NID_secp224r1));

if(!key)
    throw std::runtime_error("Error creating curve key");

if(!EC_KEY_generate_key(key.get()))
    throw std::runtime_error("Error generating curve key");

if(!EC_KEY_check_key(key.get()))
    throw std::runtime_error("Error checking curve key");

// ... etc ...

// Do not delete the key manually!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Java

从私钥派生ECDSA公钥

来自分类Dev

如何从其私钥生成ECDSA公钥?

来自分类Dev

OpenPGP公钥和私钥对可以具有不同的密钥ID(短密钥ID)吗?

来自分类Dev

如何将ECDSA公钥与其私钥配对

来自分类Java

私钥,公钥和证书的关系,以及从密钥库访问特定证书的最佳方法

来自分类Java

如何从我们创建的密钥库中检索我的公钥和私钥

来自分类Dev

必须引用包含私钥和对应的公钥证书链的有效KeyStore密钥条目

来自分类Dev

Python:根据原始字节表示的私钥和公钥创建ECC密钥

来自分类Java

keytool-查看公钥和私钥

来自分类Dev

RSACryptoServiceProvider导出公钥和私钥对(PowerShell)

来自分类Dev

IT安全中公钥和私钥的基础

来自分类Dev

如何使用openssl创建公钥和私钥?

来自分类Dev

用Bouncy Castle重构私钥和公钥?

来自分类Dev

如何从.key文件中提取公钥和私钥?

来自分类Java

对使用公钥和私钥加密(用于加密)感到困惑

来自分类Dev

在Java中以十六进制生成公钥和私钥

来自分类Dev

与公钥和私钥以及JWT相关的混乱

来自分类Dev

keyStore rsa privateKeyEntry,公钥和私钥相等

来自分类Dev

我可以在ZeroMQ中交换私钥和公钥吗

来自分类Dev

如何从RSA JWK中提取公钥和私钥?

来自分类Dev

从用户使用公钥和私钥的最佳实践是什么

来自分类Dev

在Java中生成公钥和私钥会生成所有私钥和公钥的相似开始

来自分类Dev

从私钥中提取公钥

来自分类Dev

生成RSA公钥/私钥对

来自分类Java

从文件中读取公钥或私钥时,如何解决“无效的密钥格式”?

来自分类Dev

如何从包含.Net Core中的私钥/公钥的PEM文件中导入PKCS1密钥

来自分类Dev

捆绑的SSL证书公钥与私钥公钥不匹配

来自分类Java

AES 256加密:公钥和私钥如何生成和使用.net

来自分类Dev

如何封送ECC公钥或私钥

TOP 榜单

热门标签

归档