即使生成了正确的明文,OpenSSL 仍表示“解密错误”

Dav*_*ave 4 linux openssl

我在 RHEL 6.9 下使用 OpenSSL 1.0.1e-fips。

我用这个命令加密了一个文件:

openssl enc -aes-256-gcm -a -e -in plaintext -out ciphertext
Run Code Online (Sandbox Code Playgroud)

然后我用这个命令解密加密的文件:

openssl enc -aes-256-gcm -a -d -in ciphertext
Run Code Online (Sandbox Code Playgroud)

此命令产生以下输出:

test text
bad decrypt
Run Code Online (Sandbox Code Playgroud)

文件已正确解密(即文件内容确实是“测试文本”),但 OpenSSL 报告“解密错误”。即使我明确指定要使用的哈希函数(例如-md sha512),也会发生这种情况。

为什么我收到“坏解密”消息?

小智 5

没有任何版本的 OpenSSL 支持与“enc”命令行应用程序结合使用的任何 AEAD 模式(包括 GCM)。如果您尝试使用这种模式加密/解密,所有当前支持的 OpenSSL 版本都将显示错误消息:

$ openssl enc -aes-256-gcm -a -e -in plaintext -out ciphertext
enc: AEAD ciphers not supported
Run Code Online (Sandbox Code Playgroud)

OpenSSL 1.0.1 是 OpenSSL 的一个非常旧的版本,目前项目不支持(尽管 Red Hat 可能支持它)。非常旧版本的 OpenSSL 没有产生上述警告的 AEAD 检查,并且无论如何都尝试加密/解密 - 但不正确。最重要的是,“enc”命令不知道如何处理 AEAD 模式的“标签”(因此您会看到“错误解密”消息)。该标签对于安全性至关重要,因为它可以验证密文的完整性。

该命令可能看起来有效 - 但事实并非如此。基本上不要将 GCM 模式与 enc 命令一起使用。

  • 使用 aes-256-gcm 加密的标准 Linux 工具是什么? (4认同)