我正在尝试使用 AES 算法加密文件,并使用 GPG 中的私钥对其进行签名。我使用的命令是
gpg --encrypt --symmetric --cipher-algo aes256 --armor --sign input-file
它要求我输入对称密钥,然后输入密码来解锁我的密钥以进行签名。到目前为止一切都很好。它进一步询问收件人的公钥,如果我不输入任何公钥,整个步骤就会失败。既然我使用的是对称加密,为什么还需要提供收件人的身份?当我只使用该--encrypt
选项时,应该会问这个问题。
的手册页gpg
指出,使用--symmetric
选项时,收件人可以使用对称密钥或他的私钥解密内容。这听起来像是这里有一个选项。在这种情况下,如果我不提供任何收件人身份,则该过程应该忽略该部分并继续进行。但整个过程失败了。
请有人澄清一下。
答案1
gpg --encrypt --symmetric --cipher-algo aes256 --armor --sign input-file
既然我使用对称加密,为什么我还需要提供收件人的身份。
发生这种情况是因为您包含了--encrypt
用于公钥加密的命令。
答案2
在本教程据称:
对称加密有其问题。它不允许您同时对消息进行签名以表明它未被篡改或被其他人生成的其他文件替换!(但是,您可以稍后使用签名消息部分中的技术手动对其进行签名,但理论上攻击者可以在您加密和签名之间的短暂时间内替换该文件。)
所以你需要分两步进行。
答案3
手册页表明您可以使用--encrypt
和--symmetric
来实现这一点。
--encrypt
将数据加密为一个或多个公钥。此命令可以与 --sign(对消息进行签名和加密)、--symmetric(对消息进行加密,可使用密钥或密码解密)或 --sign 和 --symmetric 组合使用(对消息进行签名,可使用密钥或密码解密)。--recipient 和相关选项指定要使用哪些公钥进行加密。
我在使用类似的语法时遇到了同样的问题。
然而,这种方法GNU 隐私手册作品
gpg --output doc.gpg --symmetric doc
您还可以添加--cipher-algo AES-256
以获得所需的位强度。