使用GPG加密而不向加密文件添加内容?

时间:2018-01-17 09:38:03

标签: cryptography gnupg encryption-symmetric

$ echo "helloworld" > text.txt
$ cat text.txt
helloworld

$ gpg --cipher-algo AES256 --symmetric --armor text.txt
gpg: gpg-agent is not available in this session
$ ls
text.txt text.txt.asc

$ cat text.txt.asc
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1

jA0ECQMCnGyzh+mRmpBg0kgBfcqLbdAhLc+xwZDta3/kudi/f6MmjXUzFUbNFr3H
IoXgqzjRqbeNESHd+nFSTxHQc8tXF80vXMdDzTy3HmD6ZWk3BvVx5Vo=
=EviP
-----END PGP MESSAGE-----

那么,我怎样才能避免添加GPG?我只想要加密的字节。

由于AES256是对称的,我想做这样的事情:

1. Apply AES with keyA to "file_original.txt" and produce "file_keyA.txt"
2. Apply AES with keyB to "file_keyA.txt" and get "file_keyA_keyB.txt"
3. Apply AES with keyA to "file_keyA_keyB.txt" and get "file_keyB.txt"
4. Apply AES with keyB to "file_keyB" and get "file_original.txt"

所以,如果我是A,并希望发送"某些文字"给我的朋友B:

  1. 我发送" sometext"使用带有keyA的GPG加密到我的朋友。
  2. 他还给他发了他用keyB加密的文字。
  3. 我用我的keyA解密并发回给他。
  4. 他应该应用keyB并获得" sometext"。
  5. 如果我在不知道我的keyA的情况下使用带有AES的gpg和我的朋友的另一个软件或其他对称算法应该是可能的。但只有在gpg(或他的软件)没有向加密文件添加内容的情况下才有可能。我想只应用算法AES,所以我可以使用相同的密钥加密多次并获得原始。

2 个答案:

答案 0 :(得分:2)

可能你想用openssl而不是gnupg。例如:

openssl enc -aes128 -salt -in yyy -out yyy.enc

有关联机帮助页的更多信息:https://www.openssl.org/docs/man1.0.2/apps/enc.html

答案 1 :(得分:1)

如果您希望使用gpg向您的朋友发送加密邮件,而不共享用于解密邮件的密码,那么您可能希望使用非对称加密。为此,您和您的朋友将需要使用

生成PGP密钥
gpg --gen-key

然后交换你的公钥

gpg -a --export "mykey" > mykey.pub
<trade mykey.pub files>
gpg --import theirkey.pub

然后准备要传输的消息

gpg -e -a -u "my key" -r "their key" --sign -o somefile.txt.gpg somefile.txt

在你的朋友收到消息之后,他们需要用

解密它
gpg -d -o somefile.txt somefile.txt.gpg

他们得到了消息。 GnuPG将生成一个强密钥,使用该密钥加密消息,然后使用您朋友的密钥加密该密钥并将其附加到该文件。它还会使用您的私钥对文件进行签名,这样您的朋友就可以(合理地)确保它在传输过程中没有被篡改。在此示例中,您可以使用

gpg --list-keys <or gpg -k>

找到他们的关键句柄(它是“rsa4096 /”之后和创建日期之前的位)在-r“他们的关键”部分的引号中使用,并且

gpg --list-secret-keys <or gpg -K>

找到你的密钥的句柄,在-u“my key”部分中使用。

如果您真的希望使用对称加密并与朋友分享密码,那么我也建议使用openssl,就像@pchris建议的那样。