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

dem*_*guy 2 rsa openssl

openssl pkeyutl -sign -pkeyopt digest:sha256和 和有openssl rsautl -sign什么区别?他们做同样的事情吗?

dav*_*085 10

pkeyutl -sign使用 RSA 密钥(rsa_padding_mode默认为pkcs1pkcs1-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 编码添加到原始哈希中,因此如果您希望您的签名被理解和接受,您需要自己这样做被别人。pkeyutl -signWITHOUT-pkeyopt digest也跳过 ASN.1 编码。

为完整起见,dgst -$hash -sign或其缩写形式$hash -sign与 RSA 密钥完成整个工作:散列、ASN.1 编码、填充 01FF..00 和 modexp。