openssl pkeyutl -sign -pkeyopt digest:sha256
和有什么区别openssl rsautl -sign
?它们的作用相同吗?
答案1
pkeyutl -sign
使用 RSA 密钥(rsa_padding_mode
默认pkcs1
为 pkcs1-v1_5)并-pkeyopt digest:$hash
执行 rfc3447 第 9.2 节中 EMSA-PKCS1-v1_5-ENCODE 的第 2-6 步,然后执行第 8.2 节中 RSASSA-PKCS1-v1_5-SIGN 的第 2 步。换句话说,它除了散列数据外什么都做(但它会检查长度输入哈希的姓名您在此处指定的哈希值与您实际使用的哈希值不同,生成的签名将无法正确验证。
rsautl -sign
(类似默认)仅执行步骤 4-6 和步骤 2。换句话说,它不会将 ASN.1 AlgorithmIdentifier 编码添加到原始哈希中,因此如果您希望其他人理解和接受您的签名,则需要自己执行此操作。WITHOUTpkeyutl -sign
也会-pkeyopt digest
跳过 ASN.1 编码。
为了完整性,dgst -$hash -sign
或者使用 RSA 密钥的缩写形式$hash -sign
完成整个工作:哈希、ASN.1 编码、填充 01FF..00 和 modexp。