gpg用法

2021-11-10  本文已影响0人  星空星晴

环境:ubuntu-server-20.04.3

生成密钥

1,产生密钥对

key的属性:key name,user id,key id,key fingerprint

# gpg --key-gen 【快速产生key pair,默认RSA,密钥长度3072,有效期1年】

# gpg --generate-key【快速产生key pair,默认RSA,密钥长度3072,有效期1年】

# gpg --full-generate-key 【完整的交互式生成,由用户选择非对称密码算法、长度、有效期等等】

交互1 密钥生成过程交互2

查看密钥

查看公钥

# gpg -k  

查看公钥

# gpg --list-keys

查看私钥

# gpg -K

查看私钥

# gpg --list-secret-keys

查看私钥

删除密钥

要求先删除私钥,再删除公钥,删除私钥的过程会多次确认。

# gpg --delete-secret-keys 086A83E4920E558197652B55CEB674AF2FF7EB12

# gpg --delete-keys 086A83E4920E558197652B55CEB674AF2FF7EB12

密钥导出及导入

产生的密钥对(/root/.gnupg/pubring.kbx)以二进制形式储存,armor参数可以将其转换为ASCII码显示。

导出公钥

# gpg --armor --export server_rsa_key_for_root > server_rsa_key_for_root.pub

--armor 简写为 -a,将其转换为ASCII码显示

可以根据key name、key id、用户id等信息导出。

导出私钥

将私钥写入server_rsa_key_for_root.private文件,导出私钥时,需要输入产生密钥时指定的密码短语(用于保护私钥)。
# gpg -a --export-secret-keys 51E66699474095C81412BE0882F11361EE05E67A > server_rsa_key_for_root.private

加密

公钥加密,私钥解密

# gpg --recipient server_rsa_key_for_root --output demo.en.txt --encrypt demo.txt

加密

解密

# gpg --output demo.de.txt --decrypt demo.en.txt

--output选项位于中间时不报错,位于命令行参数最后,报错 可以使用重定向操作代替

私钥解密的过程需要输入密钥保护短语。

解密

签名

私钥签名,公钥验证。

gpg目前支持三种形式的签名:

1,内容与签名不分离,二进制形式保存(--sign)

2,内容与签名不分离,ASCII形式保存(--clearsign)

3,内容与签名分开存储。(--detach-sign)

# gpg --sign demo.txt

运行上面的命令后,当前目录下生成demo.txt.gpg文件,这就是签名后的文件。这个文件默认采用二进制储存,如果想生成ASCII码的签名文件,可以使用clearsign参数。

签名1

# gpg --clearsign demo.txt

运行上面的命令后 ,当前目录下生成demo.txt.asc文件,后缀名asc表示该文件是ASCII码形式的。

签名2

3,如果想生成单独的签名文件,与文件内容分开存放,可以使用detach-sign参数。

# gpg --detach-sign demo.txt

运行上面的命令后,当前目录下生成一个单独的签名文件demo.txt.sig。该文件是二进制形式的,如果想采用ASCII码形式,要加上armor参数。

签名

4,

# gpg --armor --detach-sign demo.txt

签名4

验证

# gpg --verify demo.txt.asc demo.txt

# gpg --verify demo.txt.gpg

签名验证 验证不通过vs验证通过

同时加密和签名

用发送者的私钥签名,用接受者的公钥加密。

gpg --local-user [发送者ID] --recipient [接收者ID] --armor --sign --encrypt demo.txt

local-user参数指定用发送者的私钥签名

recipient参数指定用接收者的公钥加密

armor参数表示采用ASCII码形式显示

sign参数表示需要签名

encrypt参数表示指定源文件

这步操作,需要导入接受者的公钥到发送者机器(发送者要用接受者的公钥加密),同时需要导入发送者的公钥到接收者的机器(接受者要用发送者的公钥验证签名)。

上一篇下一篇

猜你喜欢

热点阅读