gpg: 解密失败:会话密钥错误

15

我正在尝试使用gpg解密一个文件,但是遇到了以下错误:

$ gpg --no-tty --batch --verbose --decrypt --passphrase foo file.enc
Version: GnuPG v1.4.11 (GNU/Linux)
gpg: armor header: 
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
gpg: decryption failed: Bad session key

我尝试重新加载gpg代理,但没有成功:

$ gpgconf --reload gpg-agent

如何解决这个问题?


请添加 gpg --list-packets < file.enc 命令的输出。您可以删除任何您想删除的密钥信息,我主要关心的是结构。 - Jens Erat
5
可能导致出现这个错误信息的原因之一是你使用了错误的密码短语。 - Dzamo Norton
4个回答

23

记录一下,如果有人也遇到了这个问题:

问题在于加密时使用的是 gpg 版本 1.4.11,而解密时使用的却是 gpg 版本 2.0.22。

将加密升级至 gpg2 (2.0.17) 后,一切正常运作。


谢谢,这正是我的问题。升级到gpg2并将别名从gpg2重命名为gpg解决了这个问题。 - albogdano
11
如果有人(比如我)拥有加密数据并需要解密,但却不能将加密器更新到相同的版本,该怎么办? - EsseTi
@redjamjar 我猜你唯一的机会就是使用旧版本进行解密。可以并行安装和运行不同的gpg版本,这应该是可行的。 - Udo Klimaschewski

13

我发现这个代码似乎是我无法在其他地方找到的魔法:

尝试在你的命令中添加--pinentry-mode loopback。也许是因为你的安装/ pinentry程序存在问题,导致它无法启动,或者你不小心使用了一个虚拟/测试pinentry,提供了错误的密码。


4
对我有效的确切命令是:gpg --pinentry loopback --decrypt MYFILE.gpg。 - Joshua Richardson

1

我使用批处理模式用密码文件加密了我的文件。当我尝试解密文件时,出现了可怕的“坏会话密钥”消息。

我使用Vim for Windows创建了一个密码文件,并且即使我没有按回车键,Vim也在文本行末尾留下了\r\n。gpg忽略了\n,但是将\r保留为密码的一部分!

Vim for Windows可以被诱导不留下\r\n,但最好使用无回车符的记事本。最好使用hexdump检查您的密码文件以确保安全。在使用命令行提供密码时,存在其他受到\r\n问题影响的方式,因此请注意。


0

我通过从密码中删除特殊字符,如%,来解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接