我有一个要通过以下命令签名的文件:
$ openssl sha256 -binary myfile.txt > my.digest
$ openssl rsautl -sign -inkey privatekey.pem -in my.digest > wrong.result
是否有任何等效命令可以获得相同的结果?我尝试了以下方法(首先计算sha256摘要,然后签署摘要)。但它不起作用:
-XX:-UseAdaptiveSizePolicy
" wrong.result" 的内容总是与" right.result" 不同。有人能告诉我原因吗?非常感谢你!
答案 0 :(得分:-1)
使用openssl sha256 -sign ...
使openssl计算PKCS#1" SHA256withRSA"算法,由RFC-8017完全指定。
这不仅仅意味着执行SHA-256摘要并使用RSA 进行签名,就像您在示例的第二部分中所做的那样。
原因如下:
根据此RFC,签名必须与RSA模数具有相同的长度。您的RSA模数为512位长(使用openssl genrsa
的默认值)或更多,因此计算的签名必须具有512位(或更多)的长度。即使散列函数(HMAC-SHA256)返回256位长度的值。
因此,要计算512位的签名,仅从256位的HMAC-SHA256摘要,RFC-8017要求您使用I2OSP Integer-to-Octet-String原语,它带有2个参数:您的256位哈希,和整数512(RSA模数的长度)。 I2OSP将输出512位长度的八位字节串。最后,这是将使用您的RSA私钥加密的八位字节字符串。
但您尚未计算此中间整数到八位字符串的值。这就是您的签名不匹配的原因。