openssl pkeyutl -sign 和 openssl rsautl -sign 有什么区别

openssl pkeyutl -sign 和 openssl rsautl -sign 有什么区别

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。

相关内容