我无法解密openssl
在 Ubuntu 16.04 上加密的一些文本文件。我总是收到此错误消息:
$ openssl des3 -d < ~/ISRIC/credentials.txt.des3.old > ~/temp/credentials.txt.old.2
enter des-ede3-cbc decryption password:
bad decrypt
139771261990464:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:../crypto/evp/evp_enc.c:536:
我很确定密码是正确的。问题是什么?
对于已经加密的文件,您可以使用
md
选项强制使用旧md5
密码方法。这解决了我使用 1.0.2 和 aes-256-cbc 加密的文件的问题,这些文件在 18.04(openssl 1.1.0+)上无法解密。
我之前的解密:
我在 18.04 上的新解密:
注意:
这不适用于在 18.04 (openssl 1.1.0g+) 上加密的文件,因为 Luis de Sousa 指出,默认情况下这些文件将使用较新的 SHA 密码方法。
参考资料:
https ://askubuntu.com/a/1067765/873241 (Luis de Sousa 的回答)
https://bugzilla.redhat.com/show_bug.cgi?id=1520084
https://github.com/fastlane/fastlane/问题/9542
使用的基于密码的加密算法
openssl
从 1.0.2 版(Ubuntu 16.04 附带)中的 MD5 更改为 1.1.0 版(Ubuntu 18.04)中的 SHA256。因此,在 Ubuntu 16.04 上加密的任何文件都无法在 Ubuntu 18.04 上解密。解决方案是安装以前的版本openssl
,解密文件并使用较新的版本再次加密它们。一步步:首先下载旧版本
openssl
(这是 amd64 版本,其他版本请查看packages.ubuntu.com):现在直接使用 安装包
dpkg
,这将禁用较新的版本:确保您获得了正确的版本:
现在解密文件:
然后安装最新的 openssl 构建,
apt
是一个选项:确保它是最新版本:
然后使用最新版本再次加密文件:
最后删除
.deb
开头下载的文件:另一个答案基本上是正确的。尽管这些版本(v1.1.0 和 v1.1.1)的其他内容发生了变化,但请注意这一点。
首先,默认密码散列摘要已更改,从 md5 变为 sha512
其次,添加了长期以来需要的“-pbkdf2”“-iter”。然而,默认的迭代次数太少了,应该设置得尽可能高,而不会变得太烦人。对于加密和解密来说,大到 1/2 秒的时间通常是可以接受的,但是对于强制密码猜测来说非常困难。
问题是现在我们拥有所有这些新选项和默认值,以及不同的摘要和密码,您需要记住所有这些选项才能解密加密文件。也就是说,决定加密的任何选项都必须用于解密。然而,openssl 只存储了一些“文件魔法”(例如文件开头的“Salted__”,以及使用的随机“salt”,以及加密文件。它让您记住其他所有内容!
Aespipe 是一个旧程序,它通过将其中一些信息保存为加密数据的额外标头来解决这个问题,但它现在变得过时了,它的格式不允许新选项或易于扩展。
作为替代方案,我一直在创建一个新脚本“keepout”作为“openssl enc”的包装,以保存记住如何解密该特定文件所需的那些额外选项,即使使用更新的选项、密码或更大的迭代加密时。基本上它保存了数据所需的 openssl 选项。
https://antofthy.gitlab.io/software/#keepout