gpg --encrypt 失败

信息安全 加密 gnupg
2021-08-25 14:43:04

尝试加密文件时,我在 KGpg 编辑器窗口中收到以下错误:

加密失败,错误代码 2

在命令行我得到:

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
 ---------------------------------
pub   2048D/5E04B919 2012-02-02 [expires: 2016-02-01]
uid                  Firstname Lastname <email.address@domain.com>
uid                  [jpeg image of size 4005]

$ 
$ gpg --encrypt file-to-encrypt
You did not specify a user ID. (you may use "-r")

Current recipients:

Enter the user ID.  End with an empty line: email.address@domain.com
No such user ID.

这曾经在编辑器和命令行上使用相同的键工作。Current recipients:是空的。这是为什么?

更新:

当尝试使用该-r选项在命令行上指定用户 ID 时,我得到以下信息:

$ gpg -r email.address@domain.com --encrypt file-to-encrypt
gpg: email.address@domain.com: skipped: unusable public key
gpg: file-to-encrypt: encryption failed: unusable public key

信息:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.10
Release:        12.10
Codename:       quantal

$ dpkg -s gnupg
Package: gnupg
Status: install ok installed
Priority: important
Section: utils
Installed-Size: 1936
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Multi-Arch: foreign
Version: 1.4.11-3ubuntu4.4
4个回答

我弄清楚了问题和解决方案是什么,所以如果有人遇到同样的问题,我会给出详细的答案,这可能会有所帮助。

这个问题有点模棱两可,没有给出真正有用的错误消息。

原来加密子密钥过期了。奇怪的是,gpg --list-keys没有显示过期的子密钥!!一旦子密钥过期,它就会包含在gpg --list-keys.

此外,KGpg不会以任何方式显示子密钥已过期,也不允许延长子密钥的过期时间(只能更改主密钥的过期时间)。

解决方案之前的输出gpg --list-keys(我更改了个人详细信息):

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
---------------------------------
pub   2048D/5E04B919 2012-02-02 [expires: 2016-02-01]
uid                  Firstname Lastname <email.address@domain.com>
uid                  [jpeg image of size 4005]

而已。

但是,gpg --edit 5E04B919显示子密钥已过期

$ gpg --edit 16AE78C5
gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub  2048D/5E04B919  created: 2012-02-02  expires: 2016-02-01  usage: SCA 
                     trust: ultimate      validity: ultimate
sub  1024g/16AE78C5  created: 2012-02-02  expired: 2014-02-01  usage: E   
[ultimate] (1). Firstname Lastname <email.address@domain.com>
[ultimate] (2)  [jpeg image of size 4005]

gpg>

在谷歌搜索之后,我找到了这个邮件列表存档,它为我指明了正确的方向,以使用gpg命令行延长子密钥的到期时间:

http://lists.gnupg.org/pipermail/gnupg-users/2005-June/026063.html

为了完整起见,以下是上述链接邮件列表存档中的相关部分:

gpg --edit-key [密钥 ID]

然后 Command> key N 其中 N 是子键的索引。例如,如果您要扩展其有效性的子键是第一个列出的子键,或者如果它是唯一列出的子键,那么命令将是

命令>键1

这将在单词 sub 之后放置一个 *,表示该特定子键已被选中。然后

命令>过期

并按照提示进行操作。希望这对你有用,对我有用(Macintosh OS X 10.4.1)查理

我按照说明延长了子密钥的有效期。在此之后gpg --list-keys给出了不同的输出:

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
---------------------------------
pub   2048D/5E04B919 2012-02-02 [expires: 2016-03-12]
uid                  Firstname Lastname <email.address@domain.com>
uid                  [jpeg image of size 4005]
sub   1024g/16AE78C5 2012-02-02 [expires: 2016-03-12]

在此之后,一切恢复正常,我可以加密文件等。

就我而言,我导入了gpg --import path/to/key在其他机器上生成的密钥 ( )。

但我无法使用它,因为它不受信任。

我执行gpg --edit-key "MY KEY ID" trust并设置了信任级别 5。

之后我的密钥变得可信,现在我可以用它来加密了。

您需要指定要用于加密的密钥,因此在这种情况下您需要的命令是gpg -r email.address@domain.com --encrypt file-to-encrypt.

我遇到了同样的问题(过期的公钥)并遇到了这个线程。建议的解决方案marekful虽然非常有用,但仅在您可以访问(相应的)密钥时才有效。

由于在我的情况下这个前提条件不成立,我最终继续将我的系统时间更改为更早的日期(当密钥仍然有效时)。这导致了一条回避skipped: unusable public key消息。

我知道使用过期密钥不是一个好习惯。如果情况绝对需要,请将此作为最后的手段。