openssl加密文件别人无法解密

WT.*_*T.D 5 openssl

这是在 OS X 上。我使用以下命令加密了一个文件:

openssl enc -aes-256-cbc -salt -in secrets.json -out secrets.json.enc
Run Code Online (Sandbox Code Playgroud)

我被要求输入密码。然后我可以解密它

openssl enc -d -aes-256-cbc -in secrets.json.enc -out secrets.json
Run Code Online (Sandbox Code Playgroud)

系统要求我输入密码,我使用了刚才设置的密码。解密成功。

然而,我的同事复制了这个文件,却发现他无法用相同的命令和密码解密它。这是他所看到的:

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:
Run Code Online (Sandbox Code Playgroud)

我的 OS X 有

11:31 $ openssl version
LibreSSL 2.2.7
Run Code Online (Sandbox Code Playgroud)

他的 OS X 有

11:29 $ openssl version
OpenSSL 1.1.1b  26 Feb 2019
Run Code Online (Sandbox Code Playgroud)

后来他升级到 LibreSSL 2.9.2,但仍然看到同样的情况。

小智 14

可能有点晚了,但我遇到了同样的问题并弄清楚了:这是因为默认情况下 LibreSSL 和 OpenSSL 不使用相同的摘要从密码创建密钥。LibreSSL 使用 MD5 和 OpenSSL sha256。您可以要求在编码或解码时使用特定的选项-md。使用

openssl enc -d -aes-256-cbc -in secrets.json.enc -out secrets.json -md md5
Run Code Online (Sandbox Code Playgroud)

在 OpenSSL 版本(您用来解密的版本)上应该可以工作。无论如何,最好在加密期间指定这一点,以避免依赖版本默认设置。