机器 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 有多么过时,但不幸的是我无法控制它的升级(它是一个远程 3rd 方服务器)。
使用 AES 加密时,OpenSSL 和 LibreSSL 之间是否存在不兼容?
找到了解决方案,在这里发布以防它帮助其他面临同样问题的人。
显然,在更高版本的 OpenSSL(后来的 LibreSSL)中,密钥派生的默认哈希算法从 md5 更改为 sha256。
更多细节在这里: https ://github.com/libressl-portable/portable/issues/378
所以现在我在两个命令行中明确指定散列算法。在机器 A 上加密:
并在机器 B 上解密:
现在它工作正常。