用私钥加密后如何用公钥解密?

用私钥加密后如何用公钥解密?

我使用命令行用对称密钥加密了一个文件openssl,然后用 RSA 公钥加密了该对称密钥。我对加密和解密进行了一些试验,然后我意外地用我的 RSA 私钥加密了对称密钥。加密过程没有任何错误。

所以现在我无法解密对称密钥以获取我的文件。是否有任何openssl命令可以使用公钥解密?


我用于加密的命令行:

openssl rsautl -encrypt -inkey private_key.pem -in symmKey.key -out symmKey.enc

对于解密,我尝试使用:

openssl rsautl -decrypt -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key

我还尝试使用以下方法进行验证symmKey.enc

openssl rsautl -verify -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key

但随后我收到以下错误:

RSA operation error
    5968:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:crypto\rsa\rsa_pk1.c:67:
    5968:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:crypto\rsa\rsa_ossl.c:586:`

答案1

实际上你根本没有用私钥加密。私钥的编码包含私钥所需的两个组件和公钥OpenSSL 命令行非常智能,能够选择编码的私钥加密时。

因此您可以简单地使用私钥解密:

openssl rsautl -decrypt -inkey private_key.pem -in symmKey.enc -out symmKey.key

注意,模数已经存在于私钥中。公钥由模数和公共指数组成,公共指数通常设置为费马大数的第五个素数:F4,值为 0x010001(65537)。因此,如果只是为了方便,很容易将其存储在私钥中。

相关内容