Encryption 可以在gpg中加密原始输入吗?

Encryption 可以在gpg中加密原始输入吗?,encryption,gnupg,Encryption,Gnupg,我想加密字符串而不将其写入文件 gpg --encrypt --sign --armor -r <target@email.com> -r <sender@email.com> <"this is a string that needs to be encrypted"> 使用GPG加密文件的方法是 gpg --encrypt --sign --armor -r <target@email.com> -r <sender@email.com

我想加密字符串而不将其写入文件

gpg --encrypt --sign --armor -r <target@email.com> -r <sender@email.com> <"this is a string that needs to be encrypted">
使用GPG加密文件的方法是

gpg --encrypt --sign --armor -r <target@email.com> -r <sender@email.com> <filename.txt>
gpg--encrypt--sign--armor-r-r
我想要的是能够简单地在filename.txt所在的位置键入一个字符串或一系列数字,并将其加密到一个文件中

gpg --encrypt --sign --armor -r <target@email.com> -r <sender@email.com> <"this is a string that needs to be encrypted">
gpg--encrypt--sign--armor-r-r

是否有办法做到这一点,或者是否需要传入filename.txt?

我不知道有任何选项允许您将输入作为参数传递,但您只需使用管道即可:

echo 'foo bar' | gpg -r target@example.com --encrypt

当然,您可以添加所使用的所有附加选项和命令。通过使用管道,输出不会存储为中间文件,而是使用小型内存缓冲区连接
echo
s stdout和
gpg
s stdin。

如果使用bash,可以使用herdoc语法,这对多行字符串很有用。您只需复制和粘贴多行字符串,而无需担心转义


gpg-rtarget@email.com--encrypt-o out.gpg问题的可能重复项可能类似,但答案并非如此,因为它非常特定于PHP(对于一般用途,管道是一个简单得多的解决方案,可以自动生成并连接所需的文件描述符)。关于以这种方式使用gpg的警告:当gpg运行时,系统中的任何人都可以通过检查正在运行的进程的参数(例如,使用
ps
)来查看您正在加密的文本。这就是为什么人们通常坚持使用临时文件。似乎使用临时文件是最好的方法。我猜您已经从另一个进程输出了(这里只用于获取示例输出)——在这里,管道将是完全好的。否则,在脚本上下文中,使用类似于链接答案中建议的管道。如果您正在创建临时文件,请确保使用适当的系统调用(1)确保它们不是世界可读的,(2)随后删除,(3)考虑在删除过程中不会被重写的事实,即使您自己重写(尤其是在拷贝-写入文件系统上)。但是我用
ps
进行了测试,当
gpg
运行时,
echo…
进程已经终止。(这很容易测试输出文件是否已经存在,因为
gpg
进程将等待用户提示是否覆盖输出文件。)只有
gpg
参数显示在
ps
中。