Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix GPG仅在内存中解密/加密字符串_Unix_Gnupg_Cat_Password Encryption - Fatal编程技术网

Unix GPG仅在内存中解密/加密字符串

Unix GPG仅在内存中解密/加密字符串,unix,gnupg,cat,password-encryption,Unix,Gnupg,Cat,Password Encryption,背景: 我有一个GPG加密的秘密,不能写入未加密的文件。 假设它位于~/.secrets/.mysecret.gpg 运行gpg~/.secrets/.mysecret.gpg将取消对.mysecret.gpg的加密,并将其保存到.mysecret文件中。运行gpg-d~/.secrets/.mysecret.gpg只打印解密的秘密谢谢JustinC 为了避免使用stderr并在base64中对其进行编码,我编写了这个shell函数作为一种方便的方法: 键盘阅读器{ 本地gpg_文件=$1 ec

背景:

我有一个GPG加密的秘密,不能写入未加密的文件。 假设它位于~/.secrets/.mysecret.gpg

运行gpg~/.secrets/.mysecret.gpg将取消对.mysecret.gpg的加密,并将其保存到.mysecret文件中。运行gpg-d~/.secrets/.mysecret.gpg只打印解密的秘密谢谢JustinC

为了避免使用stderr并在base64中对其进行编码,我编写了这个shell函数作为一种方便的方法:

键盘阅读器{ 本地gpg_文件=$1 echo-n$gpg-d$gpg_文件2>/dev/null | base64 } 运行keyreader ~/.secrets/.mysecret.gpg,输入加密秘密的密码后,它打印出base64编码、解密的秘密,无输出文件

问题:

当gpg-d~/.secrets/.mysecret.gpg运行时,gpg是否会编写一个包含未加密的.mysecret的tmp文件

当我使用上述语法时,为什么gpg不输出文件.mysecret?答:使用了-d标志,再次感谢贾斯汀

假设在运行命令之前使用了适当的$HISTIGNORE标识符,那么如何在没有先将字符串未加密写入文件的情况下将其从命令行加密到.gpg AES256加密文件

对于第3季度,类似于:

$echo secret info | gpg-密码算法AES265-c-o secrets_file.txt.gpg

而不是:

$gpg-cipher algo AES265-c secrets_file.txt

您确定gpg-d~/.secrets/.mysecret.gpg会将解密的文件写入磁盘吗?这不适合我

您可以使用strace检查是否创建了任何临时文件

我有时会通过键入以下内容来防止在bash历史记录中留下密码:

机密信息字符串被发送到cat程序,而不是shell,因此bash不会将其保存到历史文件。

您确定gpg-d~/.secrets/.mysecret.gpg会将解密的文件写入磁盘吗?这不适合我

您可以使用strace检查是否创建了任何临时文件

我有时会通过键入以下内容来防止在bash历史记录中留下密码:


机密信息字符串被发送到cat程序,而不是shell,因此bash不会将其保存到历史文件。

再次,@JustinC,感谢您的回答

为完整起见,以下是我仅在内存中加密/解密字符串的解决方案:

加密: 注意这里echo之前的空格 它是可以在~/.bashrc中设置的默认$HISTIGNORE标志 它防止将此行写入~/.bash_历史文件 echo-n“你的秘密在这里”|gpg-c>~/.secrets/.mysecret.gpg 输入密码短语: 解密: 2> /dev/null:跳过打印strerr gpg-d~/.secrets/.mysecrets.gpg2>/dev/null 注意:如果您收到设备的错误ioctl,您可能正在WSL上运行,这可能会帮助您:

https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors echo-e使用代理\n大陆模式环回>>~/.gnupg/gpg.conf echo allow loopback pinentry>>~/.gnupg/gpg-agent.conf echo重新加载代理| gpg连接代理
再一次,@JustinC,谢谢你的回答

为完整起见,以下是我仅在内存中加密/解密字符串的解决方案:

加密: 注意这里echo之前的空格 它是可以在~/.bashrc中设置的默认$HISTIGNORE标志 它防止将此行写入~/.bash_历史文件 echo-n“你的秘密在这里”|gpg-c>~/.secrets/.mysecret.gpg 输入密码短语: 解密: 2> /dev/null:跳过打印strerr gpg-d~/.secrets/.mysecrets.gpg2>/dev/null 注意:如果您收到设备的错误ioctl,您可能正在WSL上运行,这可能会帮助您:

https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors echo-e使用代理\n大陆模式环回>>~/.gnupg/gpg.conf echo allow loopback pinentry>>~/.gnupg/gpg-agent.conf echo重新加载代理| gpg连接代理
谢谢你的回答!我意识到我在测试时没有传递-d标志,这就是它将未加密文件写入磁盘的原因。我意识到字符串的加密问题是由于没有正确配置gpg造成的,因为我使用的是WSL。为具有相同问题的其他用户提供有关此配置的信息。我编辑了我的问题以反映您的评论。顺便说一句,非常酷的猫戏法!谢谢你的回答!我意识到我在测试时没有传递-d标志,这就是它将未加密文件写入磁盘的原因。我意识到字符串的加密问题是由于没有正确配置gpg造成的,因为我使用的是WSL。为具有相同问题的其他用户提供有关此配置的信息。我编辑了我的问题以反映您的评论。顺便说一句,非常酷的猫戏法!
PP=`cat`
secret-info ENTER Ctrl+D
echo $PP  # will print "secret-info"