gpt4 book ai didi

c - 使用 C 程序验证用私钥签名的摘要

转载 作者:太空狗 更新时间:2023-10-29 16:56:13 28 4
gpt4 key购买 nike

我将解释到目前为止我完成的所有步骤,并以我的问题作为结尾。

使用 OpenSSL 1.0.1e-fips 2013 年 2 月 11 日

生成私钥和公钥

openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem

使用摘要和私钥签署消息

openssl dgst -sha256 -sign private.pem -out message.secret message.txt

此时我有一个公钥、一个签名消息(带有摘要)和原始消息。

第 1 部分 - 使用 CLI(这个有效)

使用 CLI 我设法验证了摘要:

openssl dgst -sha256 -verify public.pem -signature message.secret message.txt

我得到“Verified OK”作为返回值。

第 2 部分 - 使用 C 程序

我的程序是这样的:

哪里:

msg是message.txt

签名是message.secret

pkey 是公钥(使用 PEM_read_PUBKEY 实现)

int verify_it(const byte* msg, size_t msg_len, byte* signature, EVP_PKEY* pkey) {
EVP_MD_CTX *ctx;
size_t sig_len;
int bool_ret;
int ret_val;

ret_val = EXIT_SUCCESS;
ctx = NULL;

do
{
ctx = EVP_MD_CTX_create();
const EVP_MD* md = EVP_get_digestbyname( "SHA256" );

EVP_DigestInit_ex( ctx, md, NULL );
EVP_DigestVerifyInit( ctx, NULL, md, NULL, pkey );
EVP_DigestVerifyUpdate(ctx, msg, msg_len);

sig_len = 256;
if ( !EVP_DigestVerifyFinal( ctx, signature, sig_len )
ERR_print_errors_fp( stdout )
);

} while(0);

return ret_val;

}

此代码返回验证失败(值为 0)。

函数 ERR_print_errors_fp( stdout ) 也打印以下消息:

140332412258152:error:04091077:lib(4):func(145):reason(119):rsa_sign.c:176

编辑

感谢@deniss 我已经设法解决了这个问题(签名长度很糟糕 - 可能是 '\0' 中间签名 - 所以我只是将长度编辑为 256)

但现在我遇到了另一个问题 -

140195987986280:error:04091068:lib(4):func(145):reason(104):rsa_sign.c:293

用我得到的 openssl errstr 检查它

error:04091068:rsa routines:INT_RSA_VERIFY:bad signature

我获取签名的方式是这样的:

secret_fp = fopen( "message.secret", "rb" );
fseek( secret_fp, 0, SEEK_END );
file_len = ftell( secret_fp );
fseek( secret_fp, 0, SEEK_SET );

signature = malloc( file_len );
fread( signature, file_len, 1, secret_fp );

最佳答案

您始终可以将 openssl 错误代码解码为有意义的消息

openssl errstr <error-code>

代码04091077代表error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length

最可能的解释:

  • message.secret为二进制文件

  • 中间某处有零字节

  • strlen 修剪此字节上的签名

关于c - 使用 C 程序验证用私钥签名的摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32297559/

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