gpt4 book ai didi

shell - GPG修改对称加密密码

转载 作者:行者123 更新时间:2023-12-05 02:23:12 27 4
gpt4 key购买 nike

我正在尝试找出一种方法来更改由 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

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

我认为存在竞争条件。

有什么建议吗?

最佳答案

解决方案:

您需要以非交互方式告诉第一个 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

关于shell - GPG修改对称加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24815514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com