【问题标题】:GPG change symmetric encryption passwordGPG更改对称加密密码
【发布时间】:2014-07-18 00:10:50
【问题描述】:

我正在尝试找出一种方法来更改由 GPG 对称加密的文件的密码,而无需使用临时文件或 shell 变量。我知道我可以在带有变量的 shell 函数中执行此操作,但如果可能的话,我想在命令行上执行此操作。

我认为这应该是可能的,因为 GPG 将使用 gpg --symmetric -o example.gpg 加密传入流,并且因为 GPG 将使用 gpg --decrypt 将解密的输出发送到 STDOUT。

但这不能正常工作:

gpg --decrypt example.gpg | gpg --symmetric -o new.gpg

我认为我对shell操作顺序和重定向的理解是错误的。尤其是因为 shell 输出一次有多个 Enter passphrase: 提示。

这是输入管道命令后的初始交互响应:

localhost ~% gpg --decrypt example.gpg | gpg --symmetric -o example.gpg
gpg: CAST5 encrypted data
Enter passphrase: Enter passphrase

之后,我会收到各种密码提示...有时会要求我输入解密密码,然后我可以以可见的纯文本输入新密码,然后隐藏新密码确认。有时,在我被要求输入解密密码之前,我会收到新密码对话。

我认为存在竞争条件。

有什么建议吗?

【问题讨论】:

  • 究竟是什么问题?

标签: shell unix encryption command-line gnupg


【解决方案1】:

解决办法:

您需要以非交互方式告诉第一个 gpg 命令解密密码是什么。

  • 使用 gpg2(大多数现代 Linux 发行版附带此功能)可能如下所示:

    gpg --decrypt --batch --passphrase 'original passwd' example.gpg  | gpg --symmetric -o new_example.gpg
    
  • 使用 gpg1,您将使用 --no-use-agent 而不是 --batch,例如:

    gpg -d --no-use-agent --passphrase 'original passwd' example.gpg  | gpg -co new_example.gpg
    

注意:根据您的 gpg 版本及其配置方式,您可能还必须以与第二个 gpg 命令相同的方式指定密码。

根本原因:

当您将命令行与管道放在一起时,您的 shell 在设置管道以连接每个命令后同时启动所有命令(以允许将每个命令的 stdout 发送到下一个命令的 stdin) .

额外警告:

  1. 不要写入您正在读取的同一文件。它几乎永远不会如你所愿。

  2. 在多用户系统上,使用 gpg 的 --passphrase 选项是个坏主意,因为它使系统上的任何人都可以检查密码(任何人都可以运行 ps 命令并查看密码而gpg 命令正在运行)。此外,密码短语随后会保存在您的 shell 历史记录中。哎呀。如果这是个问题,请使用--passphrase-fd--passphrase-file

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 2019-05-09
    • 2015-08-01
    • 2011-09-02
    • 2018-02-23
    • 1970-01-01
    • 2019-04-07
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多