我使用命令行使用对称密钥加密了一个文件openssl,然后使用 RSA 公钥加密了该对称密钥。我尝试了一些加密和解密,然后我不小心用我的 RSA 私钥加密了对称密钥。加密继续进行,没有错误。
所以现在我无法解密对称密钥来访问我的文件。有没有openssl用公钥解密的命令?
我用于加密的命令行:
openssl rsautl -encrypt -inkey private_key.pem -in symmKey.key -out symmKey.enc
Run Code Online (Sandbox Code Playgroud)
对于解密我尝试使用:
openssl rsautl -decrypt -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key
Run Code Online (Sandbox Code Playgroud)
我还尝试验证symmKey.enc:
openssl rsautl -verify -inkey public_key.pem -pubin -in symmKey.enc -out symmKey.key
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
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:`
Run Code Online (Sandbox Code Playgroud)
实际上你根本没有用私钥加密。私钥的编码包含私钥和公钥所需的组件。OpenSSL 命令行足够智能,可以在加密时选择编码私钥中的公钥组件。
所以你可以简单地使用私钥解密:
openssl rsautl -decrypt -inkey private_key.pem -in symmKey.enc -out symmKey.key
Run Code Online (Sandbox Code Playgroud)
请注意,模数已经存在于私钥中。公钥由模数和公共指数组成,一般设置为费马的第五个素数:F4,值为0x010001(65537)。因此,如果只是为了方便起见,将其存储在私钥中是很容易的。