这是在 OS X 上。我使用以下命令加密了一个文件:
openssl enc -aes-256-cbc -salt -in secrets.json -out secrets.json.enc
我需要输入密码。然后我可以使用以下方法解密
openssl enc -d -aes-256-cbc -in secrets.json.enc -out secrets.json
系统要求输入密码,我就输入了刚才设置的密码,解密成功了。
然而,我的同事复制了这个文件,却发现他无法用同样的命令和密码解密。他看到的内容如下:
10:59 $ openssl enc -d -aes-256-cbc -in secrets.json.enc -out secrets.json
enter aes-256-cbc decryption password:
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
bad decrypt
4611925440:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:crypto/evp/evp_enc.c:570:
我的 OS X 有
11:31 $ openssl version
LibreSSL 2.2.7
他的 OS X 有
11:29 $ openssl version
OpenSSL 1.1.1b 26 Feb 2019
后来他升级到 LibreSSL 2.9.2,但仍然看到同样的问题。
答案1
可能有点晚了,但我遇到了同样的问题并找到了答案:这是因为默认情况下 LibreSSL 和 OpenSSL 不使用相同的摘要从密码短语创建密钥。LibreSSL 使用 MD5,而 OpenSSL 使用 sha256。您可以-md
在编码或解码时使用带有选项的特定选项。使用
openssl enc -d -aes-256-cbc -in secrets.json.enc -out secrets.json -md md5
OpenSSL 版本(您用于解密的版本)应该可以正常工作。无论如何,最好在加密过程中也指定这一点,以避免依赖版本默认设置。