我无法解密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:
我很确定密码正确。问题是什么?
答案1
对于已经加密的文件,您可以使用md
强制使用旧md5
密码方法的选项。
这修复了我使用 1.0.2 和 aes-256-cbc 加密的文件无法在 18.04(openssl 1.1.0+)上解密的问题。
我之前的解密:
cat encfile | openssl enc -d -aes-256-cbc -base64 >plainfile
我在 18.04 上的新解密:
cat encfile | openssl enc -md md5 -d -aes-256-cbc -base64 >plainfile
笔记:
这不适用于在 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/issues/9542
答案2
使用的基于密码的加密算法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):
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.0.2g-1ubuntu13.6_amd64.deb
现在直接使用 安装包dpkg
,这将禁用较新的版本:
$ sudo dpkg -i openssl_1.0.2g-1ubuntu13.6_amd64.deb
确保您获得了正确的版本:
$ openssl version
OpenSSL 1.0.2g 1 Mar 2016 (Library: OpenSSL 1.0.2n 7 Dec 2017)
现在解密文件:
$ openssl des3 -d < secret.des3 > secret.txt
然后安装最新的 openssl 版本,apt
是一个选项:
$ sudo apt install openssl
确保它是最新版本:
$ openssl version
OpenSSL 1.1.0g 2 Nov 2017
然后使用最新版本再次加密文件:
$ openssl des3 < secret.txt > secret.des3
最后删除.deb
一开始下载的文件:
$ rm openssl_1.0.2g-1ubuntu13.6_amd64.deb
答案3
另一个答案基本上是正确的。尽管这些版本(v1.1.0 和 v1.1.1)周围的其他内容已经发生了变化,但值得注意的是。
首先,默认密码哈希摘要已发生改变,从 md5 变为 sha512
其次,添加了“-pbkdf2”和“-iter”,这是长期以来一直需要的。但是默认迭代次数太低了,应该尽可能地设置高,而不会太烦人。对于加密和解密来说,足够大到需要 1/2 秒通常是可以接受的,但对于暴力破解密码来说却非常困难。
问题是,现在我们有了所有这些新选项和默认值,以及不同的摘要和密码,您需要记住所有这些选项,才能解密加密文件。也就是说,无论决定使用什么选项进行加密,都必须用于解密。但是,openssl 只存储一些“文件魔法”(例如文件开头的“Salted__”和加密文件中使用的随机“盐”)。其他一切都留给您自己去记住!
Aespipe 是一个老程序,它通过将部分信息保存为加密数据的额外标头来解决这个问题,但现在它已经过时了,而且它的格式不允许使用新选项,也不便于扩展。
作为替代方案,我一直在创建一个新脚本“keepout”作为“openssl enc”的包装器,以保存记住如何解密该特定文件所需的额外选项,即使在加密时使用较新的选项、密码或更大的迭代。基本上,它会将所需的 openssl 选项与数据一起保存。