gpt4 book ai didi

c - 如何使用 C 中的 openssl 调用解密私钥文件并签署一些文本?

转载 作者:太空狗 更新时间:2023-10-29 15:33:51 25 4
gpt4 key购买 nike

我有 2 个独立的程序(下面拼接在一起)。第一个生成 key 对并保存到文件(工作正常)。第二个打开私钥,用密码短语解密,然后我需要它来签署一串文本。下面的代码在 PEM_read_PrivateKey() (最后)调用中失败(看不出原因)。谁能指出我做错了什么,然后我应该调用什么 openssl 来使用私钥签署一些文本?

int main (int argc, char *argv[])
{
char *priv_pem = "priv.pem";
char *pub_pem = "pub.pem";
char *pass = "Password";
FILE *fp;
int bits = 4096;
unsigned long exp = RSA_F4;

RSA *rsa;
EVP_PKEY *pkey;

// GENERATE KEY
rsa=RSA_generate_key(bits,exp,NULL,NULL);
if (RSA_check_key(rsa)!=1)
Exit(1,"Error whilst checking key","");
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);

// WRITE ENCRYPTED PRIVATE KEY
if (!(fp = fopen(priv_pem, "w")))
Exit(2,"Error opening PEM file",priv_pem);
if (!PEM_write_PrivateKey(fp,pkey,EVP_aes_256_cbc(),NULL,0,NULL,pass))
Exit(3,"Error writing PEM file",priv_pem);
fclose(fp);

// WRITE PUBLIC KEY
if (!(fp = fopen(pub_pem, "w")))
Exit(4,"Error opening PEM file",pub_pem);
if (!PEM_write_PUBKEY(fp, pkey))
Exit(5,"Error writing PEM file",pub_pem);
fclose(fp);
// ------- End of key generation program -------

// ------- Start of text signing program -------
// READ IN ENCRYPTED PRIVATE KEY
if (!(fp = fopen(priv_pem, "r")))
Exit(6,"Error reading encrypted private key file",priv_pem);
if (!PEM_read_PrivateKey(fp,&pkey,NULL,pass))
Exit(7,"Error decrypting private key file",priv_pem);
fclose(fp);

// Sign some text using the private key....

// FREE
RSA_free(rsa);
return 0;
}

最佳答案

在将 &pkey 传递给 PEM_read_PrivateKey() 之前,您是否已将 pkey 初始化为 NULL?如果没有,它将尝试重新使用 pkey 指向的 EVP_PKEY 结构 - 如果 pkey 未初始化,它将查看内存中的一个随机点。

当发生错误时,您可以使用 ERR_print_errors_fp(stderr); 将 OpenSSL 错误堆栈转储到 stderr - 这通常有助于发现问题。

关于c - 如何使用 C 中的 openssl 调用解密私钥文件并签署一些文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320252/

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