多种 OpenSSL RSA 签名方法会产生不同的结果

2024-02-03

尝试着全神贯注于签名并使用/测试各种选项。

我可以使用以下命令进行签名:

openssl dgst -sha256 -sign private_key.pem -binary -out sig_file data_file

但文档好像说我也可以使用这个方法

openssl dgst -sha256 -binary data_file > hash_file
openssl rsautl -sign -inkey private_key.pem -keyform PEM -in hash_file > sig_file2

但当我期望它们相同时,签名却不同了。要么是我错过了选项中的某些内容,要么是我的假设中有其他错误。

此问题的真正问题是:鉴于我已经拥有哈希值并生成与上面第一个命令相同的签名,是否有一种方法可以使用命令行选项进行签名。

为了添加更多内容,我可以在代码中轻松重现第一个命令,它与上面的第一个命令匹配,这意味着我可以使用首先计算的哈希值进行签名。

mdctx = EVP_MD_CTX_create();
EVP_DigestInit_ex(mdctx, EVP_sha256(), NULL);
EVP_DigestUpdate(mdctx, data, len);
EVP_DigestFinal_ex(mdctx, hash, &s);
EVP_MD_CTX_destroy(mdctx);

kfile = fopen64(key_file, "r");
key = PEM_read_RSAPrivateKey(kfile, NULL, NULL, NULL);
fclose(kfile);

*sig = malloc(RSA_size(key));
RSA_sign(NID_sha256, hash, hlen, *sig, siglen, key);

Dupe: openSSL rsautl 和 dgst 之间的区别 https://stackoverflow.com/questions/9951559/difference-between-openssl-rsautl-and-dgst
密切相关:
为什么我使用 OpenSSL 和 Java 生成的 RSA-SHA256 签名不同? https://stackoverflow.com/questions/13419201/why-are-the-rsa-sha256-signatures-i-generate-with-openssl-and-java-different?rq=1
使用 C 例程和 openssl dgst、rsautl 命令时的不同签名 https://stackoverflow.com/questions/9380856/openssl-signature-difference-when-using-c-routines-and-openssl-dgst-rsautl-comm
使用 openssl.exe 使用 256 位 RSA 密钥对 20 字节消息进行签名,但不在代码中 https://stackoverflow.com/questions/15092298/signing-20-byte-message-with-256-bit-rsa-key-working-with-openssl-exe-but-not-in
交叉复制:https://superuser.com/questions/943972/what-is-the-difference- Between-openssl-pkeyutl-sign-and-openssl-rsautl-sign https://superuser.com/questions/943972/what-is-the-difference-between-openssl-pkeyutl-sign-and-openssl-rsautl-sign

TLDR: dgst -sign对于 RSA,执行完整的 RSASSA-PKCS1-v1_5:对数据进行哈希处理,在 ASN.1 中对哈希进行编码,填充结果,然后进行 modexp d。rsautl -sign只执行最后两个并且dgst其本身只是第一个,因此跳过编码产生不同的非标准签名。dgst(或者你自己的哈希)然后pkeyutl -sign使用 RSA 密钥and -pkeyopt digest:name_of_digest(重要的!)也有效并回答您真正的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多种 OpenSSL RSA 签名方法会产生不同的结果 的相关文章

随机推荐