我正在尝试找出一种方法来更改由 GPG 对称加密的文件的密码,而无需使用临时文件或 shell 变量。我知道我可以在带有变量的 shell 函数中执行此操作,但如果可能的话,我想在命令行上执行此操作。
我认为这应该是可能的,因为 GPG 会使用 加密传入的流,gpg --symmetric -o example.gpg并且因为 GPG 会使用 将解密的输出发送到 STDOUT gpg --decrypt。
但这不能正常工作:
gpg --decrypt example.gpg | gpg --symmetric -o new.gpg
Run Code Online (Sandbox Code Playgroud)
我认为我对 shell 操作顺序和重定向的理解是错误的。Enter passphrase:特别是因为 shell 输出一次有多个提示。
以下是输入管道命令后的初始交互响应:
localhost ~% gpg --decrypt example.gpg | gpg --symmetric -o example.gpg
gpg: CAST5 encrypted data
Enter passphrase: Enter passphrase
Run Code Online (Sandbox Code Playgroud)
之后,我会收到各种密码提示...有时会要求我输入解密密码,然后我可以以可见的纯文本形式输入新密码,然后输入隐藏的新密码确认。有时,在要求我提供解密密码之前,我会收到新密码对话框。
我认为存在竞争条件。
有什么建议吗?