多种 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 签名方法会产生不同的结果 的相关文章

  • 无法将 /root/.rnd 加载到 RNG 中

    我想使用 Windows Open SSL 生成服务器证书 当我运行此命令行时 出现此错误 我应该怎么办 Command openssl req new x509 days 3650 key ca key out ca crt Error
  • Android中从一个应用程序向另一个应用程序发送数据时的加密

    我想将敏感数据从一个应用程序发送到另一个应用程序 我使用 Intent 并通过 Bundle 发送数据 现在 我应该使用加密算法来加密要发送的数据 同时接收器应用程序将解密数据 哪种算法最适合移动平台 我浏览过RSA文档 建议不建议用于长文
  • Ruby openssl 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有 Ruby 的在线文档openssl图书馆 我能找到的只是博客文章和第三方文章 而 rdoc 本
  • OpenSSL HMAC 函数中的意外复杂性

    SSL 文档分析 这个问题与 OpenSSL 中 HMAC 例程的使用有关 由于 Openssl 文档在某些领域有点薄弱 分析表明使用 unsigned char HMAC const EVP MD evp md const void ke
  • Node.js 进行 rsa 加密的正确方法?

    我正在尝试创建一个 WS 来发出肥皂请求 在消息正文中有一个包含加密文本的字段 我有公钥来加密文本 但我获得的唯一结果是文本无法识别 我使用节点的加密模块来发出请求 并且文本已加密 但我不知道为什么没有正确加密 PS我用 openssl p
  • 为 Raspberry Pi 2 交叉编译 rust-openssl

    我在一台 Debian 机器上 我想为我的 Raspberry Pi 2 交叉编译一个项目 我已经设法使用 rustup 为一个简单的 hello world 做到了这一点 但不知道如何交叉编译 rust openssl crate 我已经
  • xampp openssl 调用 openssl_pkey_new() 时出错;

    所以我试图让 openssl 在我的 Windows 安装的 xampp 1 7 3 上工作 它是用 OpenSSL 0 9 8l 构建的 这只是我第二次在 amp 安装上安装 openssl 但第一次进展顺利 这是在同一台机器上的 wam
  • openssl ciphers 命令将密码显示为 SSL 而不是 TLS

    我的应用程序出现 SSL 握手错误的问题 开发人员认为这是因为我们的服务器上的密码错误 他们尝试使用名为 TLS RSA WITH AES 256 CBC SHA 的密码 据我所知 该密码的 openssl 名称是 AES256 SHA 当
  • 罕见的自制错误:“未知命令:开关”

    我正在尝试重新启动一些需要使用旧版本 openssl 的遗留项目 我在这个问题上找到了很好的意见here https stackoverflow com a 61086871 921573 它在我的一台机器上工作 但在另一台机器上不起作用
  • 使用 PHP 针对远程证书进行 Windows 应用商店 IAP 签名验证

    我正在尝试验证 Windows 应用商店应用程序的 PHP 中的 IAP 收据 基本上 尝试将此示例代码转换为 PHPhttp msdn microsoft com en us library windows apps jj649137 a
  • 如何解释 openssl 速度输出?

    I ran openssl speed在我的 Ubuntu 计算机上 一些结果 Doing md4 for 3s on 16 size blocks 9063888 md4 s in 3 00s Doing md4 for 3s on 64
  • Android系统应用程序信息

    我想要一些有关系统应用程序的一般信息 我正在与一家制造商合作 他们愿意向我提供使我的应用程序成为系统应用程序所需的信息 但是 我不确切知道这些信息应该是什么 也不知道如何更改我的应用程序以使其成为具有给定信息的系统应用程序 我相信我的清单中
  • openssl 是否拒绝没有基本约束的自签名证书?

    我有两个极其相似的自签名证书 是通过两种不同的方法生成的 为了测试它们 我有 在我的主机文件中添加了 local mydomain com 的条目 设置一个 nginx 服务器 使用被测试的证书和关联的私钥在端口 443 上侦听该域 然后我
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 使用 PHP 的 openssl_pkcs7_sign 签署 pdf 时出错

    我正在使用 TCPDF 生成 pdf 文档并对其进行签名 TCPDF 本身只是调用 PHP 的openssl pkcs7 sign函数 在我看来 它正在调用 C 的PKCS7 sign函数基于源代码 https github com php
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 如何访问 OpenSSL 的 EVP_PKEY 结构中的原始 ECDH 公钥、私钥和参数?

    我正在使用 OpenSSL 的 c 库生成椭圆曲线 Diffie Hellman ECDH 密钥对 遵循第一个代码示例here http wiki openssl org index php Elliptic Curve Diffie He
  • RSA SignatureException:签名长度不正确

    我在签署 rsa 签名时遇到问题 我有一个用私钥加密的签名 然而 当我尝试使用公钥验证它时遇到问题 我得到以下异常 java security SignatureException Signature length not correct
  • 使用 C#、BouncyCastle 和导入的 RSA 密钥进行 RSA 签名和验证 - 内部工作 Python 示例和非工作 C# 代码示例

    我一直在绞尽脑汁试图获得一个使用 C 和 BouncyCastle 进行 RSA 数据签名和验证的简单示例 在适用于我的 Python 和 M2Crypto 的示例中 RSACryptoServiceProvider VerifyHash
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什

随机推荐