无法在 Ubuntu 18.04 上使用 openssl 解密文本文件

无法在 Ubuntu 18.04 上使用 openssl 解密文本文件

我无法解密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 选项与数据一起保存。

https://antofthy.gitlab.io/software/#keepout

相关内容