LibreSSL aes 加密与 OpenSSL 不兼容?

LibreSSL aes 加密与 OpenSSL 不兼容?

机器 A 有 OpenSSL 1.0.2k,我加密了一个虚拟文件,如下所示:

openssl enc -aes-256-cbc -salt -in plain.txt -e -pass pass:abcd1234 -out cipher.enc

机器 B 有 LibreSSL 3.3.3,当我从机器 A 解密文件时,如下所示:

openssl enc -aes-256-cbc -in cipher.enc -d -pass pass:abcd1234 -out plain.txt

解密失败,出现以下错误:

错误解密
4444794304:错误:06FFF064:数字信封例程:CRYPTO_internal:错误解密:evp/evp_enc.c:549:

请注意,如果我尝试在机器 A 上使用相同的命令行对其进行解密,则可以正常工作。

我不知道 OpenSSL 1.0.2k 有多过时,但不幸的是我无法控制升级它(它是一个远程第三方服务器)。

使用 AES 加密时 OpenSSL 和 LibreSSL 之间是否存在不兼容?

答案1

找到了解决方案,发布在这里,希望它能帮助其他遇到同样问题的人。

显然,在 OpenSSL 的更高版本(后来的 LibreSSL)中,密钥派生的默认哈希算法从 md5 更改为 sha256。

更多详情请点击这里: https://github.com/libressl-portable/portable/issues/378

因此,现在我在两个命令行中明确指定哈希算法。要在机器 A 上加密:

openssl enc -aes-256-cbc -salt -in plain.txt -e -pass pass:abcd1234 -md sha256 -out cipher.enc

在机器B上解密:

libressl enc -aes-256-cbc -in cipher.enc -d -pass pass:abcd1234 -md sha256 -out plain.txt

现在它运行良好。

[编辑]——如果默认密钥派生参数将来可能会发生变化,或者旧的隐式默认值在某些时候被认为不够用,也许最好也明确定义它们。例如,通过包括-pbkdf2 -iter 100000
这样就变成了:

openssl enc -aes-256-cbc -salt -in plain.txt -e -pass pass:abcd1234 -md sha256 -pbkdf2 -iter 100000 -out cipher.enc

加密和解密:

libressl enc -aes-256-cbc -in cipher.enc -d -pass pass:abcd1234 -md sha256 -pbkdf2 -iter 100000 -out plain.txt

(openssl和libressl可以这样互换使用)

相关内容