首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取受3DES保护的DSA私钥

读取受3DES保护的DSA私钥
EN

Stack Overflow用户
提问于 2015-03-17 23:06:36
回答 1查看 72关注 0票数 1

下面是我如何成功地创建密钥对并存储到文件中。当读取受密码保护的私钥时,问题就来了,因为我总是得到NULL。有什么解决这个问题的建议吗?谢谢。

代码语言:javascript
复制
FILE *dsa_privatekey_file;
FILE *dsa_publickey_file;

const char *pkeykey = "password";

int result = 0;

DeleteFile("dsapub.pem");
DeleteFile("dsapriv.pem");

dsa_publickey_file = fopen("dsapub.pem", "r");
dsa_privatekey_file = fopen("dsapriv.pem", "r");

if (dsa_privatekey_file == NULL || dsa_publickey_file == NULL)
{
    if (dsa_privatekey_file != NULL)
    {
        fclose(dsa_privatekey_file);
    }
    if (dsa_publickey_file != NULL)
    {
        fclose(dsa_publickey_file);
    }

    dsa_publickey_file = fopen("dsapub.pem", "w");
    dsa_privatekey_file = fopen("dsapriv.pem", "w");

    DSA* dsa = DSA_new();
    result = DSA_generate_parameters_ex(dsa, 2048, NULL, 0, NULL, NULL, NULL);
    result = DSA_generate_key(dsa);

    result = PEM_write_DSAPrivateKey(dsa_privatekey_file, dsa, EVP_des_ede3_cbc(), NULL, 0, NULL, (void *)pkeykey);
    //result = PEM_write_DSAPrivateKey(dsa_privatekey_file, dsa, EVP_des_ede3_cbc(), (unsigned char *) pkeykey, strlen(pkeykey), NULL, NULL);
    //result = PEM_write_DSAPrivateKey(dsa_privatekey_file, dsa, NULL, NULL, 0, NULL, NULL);

    result = PEM_write_DSA_PUBKEY(dsa_publickey_file, dsa);

    fclose(dsa_privatekey_file);
    fclose(dsa_publickey_file);

    DSA_free(dsa);

    dsa_publickey_file = fopen("dsapub.pem", "r");
    dsa_privatekey_file = fopen("dsapriv.pem", "r");
}

DSA *dsa_sign = PEM_read_DSAPrivateKey(dsa_privatekey_file, NULL, default_set_password, (void *)pkeykey);

DSA *dsa_verify = PEM_read_DSA_PUBKEY(dsa_publickey_file, NULL, NULL, NULL);

下面是我用来硬插入密码的简单函数,但无论如何它似乎没有被调用。

代码语言:javascript
复制
static int default_set_password(char *buf, int size, int rwflag, void *descr){ memcpy(buf, descr, size); return size; }
EN

回答 1

Stack Overflow用户

发布于 2015-03-18 17:03:23

调用

代码语言:javascript
复制
OpenSSL_add_all_algorithms(); 

才能达到预期的效果。

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

https://stackoverflow.com/questions/29102645

复制
相关文章

相似问题

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