是否有任何等效命令通过openssl计算sha256withRSA签名?

是否有任何等效命令通过openssl计算sha256withRSA签名?,openssl,rsa,sha256,Openssl,Rsa,Sha256,我有一个文件要通过以下命令签名: $ openssl sha256 -sign privatekey.pem myfile.txt > right.result 是否有任何等效命令可以获得相同的结果?我尝试了以下方法(先计算sha256摘要,然后签署摘要)。但这是行不通的: $ openssl sha256 -binary myfile.txt > my.digest $ openssl rsautl -sign -inkey privatekey.pem -in my.diges

我有一个文件要通过以下命令签名:

$ openssl sha256 -sign privatekey.pem myfile.txt > right.result
是否有任何等效命令可以获得相同的结果?我尝试了以下方法(先计算sha256摘要,然后签署摘要)。但这是行不通的:

$ openssl sha256 -binary myfile.txt > my.digest
$ openssl rsautl -sign -inkey privatekey.pem -in my.digest > wrong.result

“错误。结果”的内容总是不同于“正确。结果”。有人能告诉我原因吗?多谢各位

使用
openssl sha256-sign…
使openssl计算PKCS#1“SHA256withRSA”算法,完全由RFC-8017指定

这不仅仅意味着像您在示例的第二部分中所做的那样,执行SHA-256摘要并使用RSA签名

原因如下:

根据此RFC,签名的长度必须与RSA模相同。您的RSA模长为512位(使用
openssl genrsa
的默认值)或更长,因此计算的签名长度必须为512位(或更长)。即使哈希函数(HMAC-SHA256)返回256位长度的值

因此,要从仅256位的HMAC-SHA256摘要计算512位的签名,RFC-8017要求您使用I2OSP Integer to Octet String原语,该原语包含两个参数:256位哈希和整数512(RSA模的长度)。I2OSP将输出512位长度的八位字节字符串。最后,这是将使用RSA私钥加密的八进制字符串

但您尚未计算此中间整数到八位字节字符串的值。这就是您的签名不匹配的原因。

Dupe和其他链接到此处的人