![为什么 GnuPG 的解密命令没有“-c”选项?](https://linux22.com/image/190568/%E4%B8%BA%E4%BB%80%E4%B9%88%20GnuPG%20%E7%9A%84%E8%A7%A3%E5%AF%86%E5%91%BD%E4%BB%A4%E6%B2%A1%E6%9C%89%E2%80%9C-c%E2%80%9D%E9%80%89%E9%A1%B9%EF%BC%9F.png)
我想知道是否支持在解密命令中指定密码算法。目前,我没有找到任何此类支持,与加密命令不同,加密命令可用于从其支持的算法列表中指定任何非默认密码算法。
使用的命令示例:
加密:
cat pwd | gpg2 --pinentry-mode loopback --passphrase-fd 0 -o plaintext.enc -r "USER ID" -c --cipher-algo IDEA -e plaintext
解密:
cat pwd | gpg2 --pinentry-mode loopback --passphrase-fd 0 -o plaintext.dec -r "USER ID" -d plaintext.enc
我是 GnuPG 的新用户,发现了这个邮政在您的网站上对于在命令行运行基本加密/解密非常有帮助。我使用 Ubuntu 20.04 VM 来测试这些命令。
答案1
我想知道是否支持在解密命令中指定密码算法。
之所以没有,是因为GnuPG的数据包语法遵循OpenPGP协议,并且所使用的密码算法在对称加密的会话密钥数据包中描述。
看RFC 4880 第 5.3 节了解详情。
编辑
我应该澄清的是,正在考虑两种不同的算法,因为加密分为两部分:
当您发出加密消息的命令时,GnuPG 首先生成一个随机会话密钥,其大小取决于默认/首选(或用 指定--cipher-algo
)对称算法,并使用此会话密钥和算法来加密消息。
加密的消息被放入 Sym 中。加密和完整性保护的数据包。
然后,GnuPG 在会话密钥前面添加一个指定对称算法的八位字节,并使用接收者的公钥(在--encrypt
或-e
命令的情况下,使用特定于该密钥类型的算法)和/或密码(在--symmetric
或-c
命令,它使用选项指定的对称算法--cipher-algo
或用户首选的对称算法)。
然后,该加密会话密钥前面加上一个描述用于加密它的算法的八位位组,然后放入公钥加密会话密钥数据包(在公钥加密的情况下)或对称密钥加密会话密钥数据包(在密码加密的情况)。
这都意味着解密算法是总是在加密的会话密钥数据包内指定;用于解密会话密钥的算法在加密会话密钥之前明确指定,解密会话密钥中的第一个八位字节指定用于解密实际消息的对称算法。