约翰想寄给1.txt
保罗。
他将其加密。现在文件被命名为myFile.pgp
,他将其发送给了保罗。
保罗拿到了文件。
Paul 如何(如果可能的话)知道原始文件名 ( 1.txt
) 是什么?是否有参数 ( --xxx
) 可以查看文件名?
我在使用 GNU PGP (GnuPG)安慰模式。
答案1
使用 GnuPG,可以在gpg --list-packets
。
$ gpg --list-packets 测试.gpg :pubkey enc 包:版本 3,算法 1,密钥 ID CE7B5510340F19EF 数据:[4095位] :加密数据包: 长度:67 mdc_方法:2 gpg:使用 4096 位 RSA 密钥加密,ID CE7B5510340F19EF,创建于 2009-10-31 “蝠鲼[电子邮件保护]>” :压缩包:算法=2 :文字数据包: 模式 b (62),创建 1356362981,名称="passwords.txt", 原始数据:8字节
(注:包括文件名在内的整个文字数据包是加密。如果您没有私钥,您也看不到名称。)
或者,你可以--decrypt
使用--verbose
(或-v -d
简称):
$gpg --verbose --decrypt test.gpg > NUL gpg:公钥是 CE7B5510340F19EF gpg:使用子键 CE7B5510340F19EF 而不是主键 D24F6CB2C1B52632 4096 位 RSA 密钥,ID CE7B5510340F19EF,创建于 2009-10-31 (主键 ID D24F6CB2C1B52632 上的子键) gpg:使用 4096 位 RSA 密钥加密,ID CE7B5510340F19EF,创建于 2009-10-31 “蝠鲼[电子邮件保护]>” gpg:AES256加密数据 gpg:原始文件名='passwords.txt'
(在 Linux 中,请> /dev/null
改用。)
如果你想解密并保存整个文件,使用--use-embedded-filename
选项:
$ gpg -v --use-embedded-filename test.gpg …无聊的输出… gpg:原始文件名='passwords.txt' 文件“passwords.txt”已存在。覆盖吗?(y/N)n
(注:您不应该使用-d
或--decrypt
与此选项一起使用,因为它从不使用嵌入的文件名。相反,使用“默认”操作。)
不要忘记并非全部文件有名称。在 Linux 中,gpg
通常用于直接加密另一个程序的输出,而不将其保存在文件中。然后它会显示为:
$ echo 测试 | gpg --store | gpg --list-packets :压缩包:算法=1 :文字数据包: 模式 b (62),创建 1356362394,名称="", 原始数据:8字节
什么时候加密(或者只是存储),可以使用 来更改嵌入的文件名--set-filename
。
$ echo 测试 | gpg --store --set-filename "test.txt" | gpg --list-packets :压缩包:算法=1 :文字数据包: 模式 b (62),创建 1356362790,名称="test.txt", 原始数据:8字节
答案2
# just placing this here for portable gpg'd tar globs, as a bash function ')
function tgp() {
# en/decrypt fileglobs as tars with gnupg
rcpt='MYUSER'
case "${1}" in
e) shift; tar c $* |gpg -er ${rcpt} -o $(date +%s).tgp
d) shift; gpg -dq ${1} |tar t && gpg -dq ${1} |tar x
t) shift; gpg -dq ${1} |tar t
*) echo "Usage: tpg [e|d|t] [glob|file]"
esac
}