Linux gpg下令(gpg指令、gpg加密工具)(GNU Privacy Guard、GnuPG)文件
Linux GPG加密工具GNU Privacy Guard (GnuPG或GPG) 是一个完全免费的开源实现,用于OpenPGP标准的数据加密息争密。这种加密方式可以用于保护敏感数据,确保其在传输过程中不被截获或窜改。本文将介绍在Linux情况中如何利用GPG加密工具。
1. 安装和设置GPG
安装gpg
在大多数Linux发行版中,GPG已经预先安装了。
如果未安装,则可以利用相应的包管理器进行安装。比方,在基于Debian的系统上,可以利用以下下令:
sudo apt-get install gnupg
创建gpg密钥
初次利用GPG时,需要生成一对密钥,包括公钥和私钥。这可以通过以下下令完成:
gpg --gen-key
我给我的Arnold用户/sxana@qq.com邮箱创建了密钥:
https://img-blog.csdnimg.cn/c1c29ddffe864bc589ad6d07438a8fcc.png
https://img-blog.csdnimg.cn/bc407d19cc3e48d1af5e031559dcf61e.png
https://img-blog.csdnimg.cn/d81aaf98c35144d48a97154077a4e58b.png
https://img-blog.csdnimg.cn/fbd7e49bb10645abbaf7cd32f219fb78.png
root@sx-virtual-machine:/userdata/testOtherPrj/20231108_testKeys# gpg --gen-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.Note: Use "gpg --full-generate-key" for a full featured key generation dialog.GnuPG needs to construct a user ID to identify your key.Real name: ArnoldEmail address: sxana@qq.comYou selected this USER-ID: "Arnold <sxana@qq.com>"Change (N)ame, (E)mail, or (O)kay/(Q)uit? OWe need to generate a lot of random bytes. It is a good idea to performsome other action (type on the keyboard, move the mouse, utilize thedisks) during the prime generation; this gives the random numbergenerator a better chance to gain enough entropy.We need to generate a lot of random bytes. It is a good idea to performsome other action (type on the keyboard, move the mouse, utilize thedisks) during the prime generation; this gives the random numbergenerator a better chance to gain enough entropy.gpg: key C0304E2CCF82E773 marked as ultimately trustedgpg: directory '/root/.gnupg/openpgp-revocs.d' createdgpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/739D66D45E6FEF19870D1188C0304E2CCF82E773.rev'public and secret key created and signed.pub rsa3072 2023-11-08 739D66D45E6FEF19870D1188C0304E2CCF82E773uid Arnold <sxana@qq.com>sub rsa3072 2023-11-08 关于公钥私钥原理,可以参考文章:SSH公钥原理(密钥,秘钥,私钥)
2. GPG密钥管理
2.1 查看密钥列表、导出和导入GPG密钥、删除密钥
查看密钥列表
gpg --list-keys
https://img-blog.csdnimg.cn/495fb176589d484d997007a882b7a171.png
关于密钥信任级别(ultimate、unknown、none、marginal、full)
在GPG中,ultimate和unknown是表示密钥信任级别的术语。
[*] ultimate:表示你对这个密钥有最高程度的信任。通常,你自己生成的密钥的信任级别会被设置为ultimate,由于你可以确定这个密钥确实属于你,而且你完全控制这个密钥。
[*] unknown:表示你对这个密钥的信任程度未知。这可能是由于这个密钥是新导入到你的密钥环的,你还没有设定对它的信任级别。
GPG的信任模型答应你设定对每个公钥的信任级别,以资助确定其他公钥的有效性。除了ultimate和unknown外,还有以下几种信任级别:
[*]none:表示你对这个密钥没有信任。
[*]marginal:表示你相称确定这个密钥的所有者就是它声称的那个人。
[*]full:表示你非常确定这个密钥的所有者就是它声称的那个人。
在大多数情况下,你不需要手动设定密钥的信任级别,除非你在利用GPG的Web of Trust特性。
导出公钥
共享公钥使其他人能够发送加密消息。下面的下令将公钥导出到文件:
gpg --output public.key --armor --export
https://img-blog.csdnimg.cn/dae622a20dac4010ad7d06e3af29c4d3.png
注意:如果同一个邮箱下有多个密钥,统统导出到一个文件。
导入公钥
当接收别人的公钥时,需要将其导入密钥环。可以利用以下下令:
gpg --import public.key
https://img-blog.csdnimg.cn/d77ad55475244e1ab60aeecc011edbdd.png
注意:如果密钥文件中有多个公钥(应该是同一个邮箱),都会统统导入。
删除密钥(公钥和私钥)
要删除GPG密钥对(包括公钥和私钥),需要先知道密钥的ID。可以通过以下下令列出所有的公钥,并找到要删除的公钥的ID:
gpg --list-keys
该下令将列出密钥环中的所有公钥,每个公钥都有一个唯一的ID。找到要删除的公钥的ID后,可以利用以下下令来删除它:
gpg --delete-key YOUR_KEY_ID
这里,YOUR_KEY_ID应更换为你想要删除的公钥的ID。
注意:如果还存在与公钥相干联的私钥,那么在尝试删除公钥时,GPG会提示你首先需要删除私钥。可以利用以下下令来删除私钥:
gpg --delete-secret-key YOUR_KEY_ID
在删除私钥之后,就可以按照上面的步骤来删除公钥了。
请审慎处理这些操作,由于一旦删除了密钥,就无法规复。除非你有备份,否则所有用该密钥加密的信息都将无法解密。
示例
删除公钥,提示这个公钥包含私钥,要先删除私钥:
https://img-blog.csdnimg.cn/34fe0126b3894d02912adb863892835e.png
https://img-blog.csdnimg.cn/ef0ecf73390947de878bd039cea82732.png
删除私钥后,我们再删除公钥:
https://img-blog.csdnimg.cn/b74eaf8eef15445ebc62f2e7f722470d.png
2.2 备份和规复GPG密钥
备份私钥
私钥是非常紧张的,因此应该定期备份。下面的下令可以将私钥导出到文件:
gpg --output private.key --armor --export-secret-keys
注意:如果邮箱下只有公钥没有私钥,是没法备份的。会输出像以下结果:
https://img-blog.csdnimg.cn/094df232d9e4491c8372364fa047d840.png
正常备份私钥,是像下面结果:
https://img-blog.csdnimg.cn/975bb1ec3301489ba63fd8fa91d5b8c6.png
https://img-blog.csdnimg.cn/6b5df58384af492ebede09e400087f9b.png
规复私钥
如果需要从备份中规复私钥,可以利用以下下令:
gpg --import private.key
https://img-blog.csdnimg.cn/50feb138c2bf4eb080216ee423c8c37a.png
3. 加密息争密数据
GPG支持多种数据类型的加密息争密,包括文本、二进制文件等。
加密数据
下面的下令将对doc.txt进行加密:
gpg --output doc.gpg --encrypt --recipient doc.txt
https://img-blog.csdnimg.cn/ca7c0d5767d143d1ac38b21f8a9f502d.png
解密数据
接收者可以利用自己的私钥来解密数据:
gpg --output doc.txt --decrypt doc.gpg
4. 利用GPG进行数字署名
数字署名提供了一种方法来验证消息的完整性和来源。
创建数字署名
gpg --output doc.sig --detach-sig doc.txt
验证数字署名
gpg --verify doc.sig doc.txt
5. GPG技术点解析
5.1 GPG加密原理
GPG利用公钥加密算法,这意味着每个用户都有一对密钥。公钥用于加密数据,私钥用于解密数据。由于私钥需要保密,以是通常存储在用户的本地系统上,并通过密码保护。
5.2 GPG与对称加密
固然GPG主要利用公钥加密,但现实上它利用了一种混合的方法。对于大型数据,GPG会生成一个一次性的会话密钥,并利用此密钥进行对称加密。然后,再用接收者的公钥加密会话密钥。
5.3 GPG数字署名原理
GPG的另一个紧张功能是数字署名。这是通过将数据的哈希值和私钥一起加密来实现的。结果就是一个数字署名,可以附加到数据上。验证署名时,将利用发送者的公钥进行解密,然后比力解密后的哈希值和数据的当前哈希值。如果两个哈希值匹配,那么数据就是完整的,没有被窜改。
6. GPG简朴文件非对称加密解密示例(脚本主动无阻塞输入)
利用gpg下令时直接指定密码(比方,通过脚本进行加密),可以利用--passphrase参数。但是我测试发现,即使利用了--passphrase,也会弹出消息提示输入passphrase,然后有两种解决办法,一种是把密码写在文件里,执行下令时去读,另一种是利用管道,用echo下令将密码传给gpg下令,我们利用第二种方法。
下面是如何做到这一点的示例:
1. 加密
echo 'YourPassPhrase' | gpg --batch --yes --passphrase-fd 0 --symmetric --cipher-algo AES256 -o outputfile.gpg inputfile.tar.gz
这个下令是用来执行对称加密的,具体来说就是利用GPG将一个名为inputfile.tar.gz的tar压缩包加密为outputfile.gpg。下面是对每个部门的表明:
[*] echo 'YourPassPhrase':这个下令输出你的密码字符串YourPassPhrase(请更换为你自己的密码)。由于背面有管道操作符|,以是这个输出将会作为下一个下令的输入。
[*] |:管道操作符。它会将前一个下令的标准输出作为后一个下令的标准输入。
[*] gpg:这是GNU Privacy Guard工具的下令行接口,它提供加密和署名功能。
[*] --batch:告诉GPG在批处理模式下运行,即不要求用户交互输入。
[*] --yes:对所有提示主动回答“yes”,比方覆盖文件等操作。
[*] --passphrase-fd 0:指示GPG从文件形貌符0读取密码,也就是从标准输入中获取密码。在这里,标准输入已经被前面的echo下令通过管道重定向了。
[*] --symmetric:指示GPG利用对称加密,意味着加密息争密利用相同的密码。
[*] --cipher-algo AES256:选择AES256作为对称加密算法。AES256是一种广泛利用的高强度加密算法。
[*] -o outputfile.gpg:指定输出文件的名称。在这个例子中,加密后的文件将保存为outputfile.gpg。
[*] inputfile.tar.gz:指定要加密的输入文件,这里是名为inputfile.tar.gz的tar压缩包。
综合来看,这个下令的执行流程是:首先输出密码,然后通过管道将该密码作为GPG下令的输入,GPG下令根据提供的参数进行对称加密,最终生成加密后的文件outputfile.gpg。
示例
https://img-blog.csdnimg.cn/dd256b05b93b434ea984c48fec510c72.png
2. 解密
echo 'YourPassPhrase' | gpg --batch --yes --passphrase-fd 0 -o outputfile.tar.gz -d inputfile.gpg
在这个下令中,
[*]echo 'YourPassPhrase':这个下令会输出你的密码。
[*]|:这个符号是管道操作,它将前一个下令的输出作为下一个下令的输入。
[*]gpg --batch --yes --passphrase-fd 0 -o outputfile.tar.gz -d inputfile.gpg:这个下令会从标准输入(由--passphrase-fd 0指定)读取密码,并用该密码来解密inputfile.gpg。
同样的,固然这种方法可以实现在下令行中直接输入密码,但请注意这并不安全,特殊是在多用户的情况中,由于其他用户可能可以查看到正在运行的进程和它们的下令行参数。
示例
https://img-blog.csdnimg.cn/f6799a5efca841c3908699ccbb6062b0.png
注意事项
[*]上述加密解密下令不能将输入文件和输出文件写成相同,否则报错。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]