GPG加密解密_gpg解密-程序员宅基地

技术标签: 密钥  运维  linux  

目录

一、GPG的用途

二、安装

三、GPG命令显示

四、生成密钥-输出密钥-上传自己公钥-输入他人公钥

1、生成密钥

2、列出密钥

3、如果要从密钥列表删除某个密钥,执行delete-key

4、输出密钥

5、上传公钥

6、输入密钥

五、加密和解密

1、加密 encrypt

2、解密

六、签名

1、对文件签名

2、签名+加密

3、验证签名


一、GPG的用途

1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP。这个软件非常好用,迅速流传开来,成了许多程序员的必备工具。但是,它是商业软件,不能自由使用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。

GPG有许多用途,本文主要介绍文件加密。至于邮件的加密,不同的邮件客户端有不同的设置。

二、安装

下载源码安装 
./configure
  make
  make install

命令安装
# Debian环境
sudo apt-get install gnupg

# Fedora 环境
yum install gnupg

三、GPG命令显示

root@kali2022:~# gpg --help
gpg (GnuPG) 2.2.35
libgcrypt 1.10.1
Copyright (C) 2022 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /root/.gnupg
支持的算法:
公钥: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
密文: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
    CAMELLIA128, CAMELLIA192, CAMELLIA256
散列: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:  不压缩, ZIP, ZLIB, BZIP2

语法:gpg [选项] [文件]
签名、检查、加密或解密
默认的操作依输入数据而定

命令:
 
 -s, --sign                         生成一份签名
     --clear-sign                   生成一份明文签名
 -b, --detach-sign                  生成一份分离的签名
 -e, --encrypt                      加密数据
 -c, --symmetric                    仅使用对称密文加密
 -d, --decrypt                      解密数据(默认)
     --verify                       验证签名
 -k, --list-keys                    列出密钥
     --list-signatures              列出密钥和签名
     --check-signatures             列出并检查密钥签名
     --fingerprint                  列出密钥和指纹
 -K, --list-secret-keys             列出私钥
     --generate-key                 生成一个新的密钥对
     --quick-generate-key           快速生成一个新的密钥对
     --quick-add-uid                快速添加一个新的用户标识
     --quick-revoke-uid             快速吊销一个用户标识
     --quick-set-expire             快速设置一个过期日期
     --full-generate-key            完整功能的密钥对生成
     --generate-revocation          生成一份吊销证书
     --delete-keys                  从公钥钥匙环里删除密钥
     --delete-secret-keys           从私钥钥匙环里删除密钥
     --quick-sign-key               快速签名一个密钥
     --quick-lsign-key              快速本地签名一个密钥
     --quick-revoke-sig             快速吊销一个密钥签名
     --sign-key                     签名一个密钥
     --lsign-key                    本地签名一个密钥
     --edit-key                     签名或编辑一个密钥
     --change-passphrase            更改密码
     --export                       导出密钥
     --send-keys                    将密钥导出到一个公钥服务器上
     --receive-keys                 从公钥服务器上导入密钥
     --search-keys                  在公钥服务器上搜索密钥
     --refresh-keys                 从公钥服务器更新所有密钥
     --import                       导入/合并密钥
     --card-status                  打印卡片状态
     --edit-card                    更改卡片上的数据
     --change-pin                   更改卡片的 PIN
     --update-trustdb               更新信任数据库
     --print-md                     打印消息摘要
     --server                       以服务器模式运行
     --tofu-policy VALUE            设置一个密钥的 TOFU 政策

控制诊断输出的选项:
 -v, --verbose                      详细模式
 -q, --quiet                        尽量减少提示信息
     --options FILE                 从 FILE 中读取选项
     --log-file FILE                将服务器模式的日志写入到 FILE

控制配置的选项:
     --default-key NAME             使用 NAME 作为默认的私钥
     --encrypt-to NAME              同时给以 NAME 为名称的用户标识加密
     --group SPEC                   设置电子邮件别名
     --openpgp                      使用严格的 OpenPGP 行为
 -n, --dry-run                      不做任何更改
 -i, --interactive                  覆盖前提示

Options controlling the output:
 -a, --armor                        创建 ASCII 字符封装的输出
 -o, --output FILE                  写输出到 FILE
     --textmode                     使用规范的文本模式
 -z N                               设置压缩等级为 N (0 为禁用)

Options controlling key import and export:
     --auto-key-locate MECHANISMS   通过邮件地址定位密钥时使用机制 MECHANISMS
     --disable-dirmngr              禁用对 dirmngr 的所有访问

Options to specify keys:
 -r, --recipient USER-ID            为 USER-ID 加密
 -u, --local-user USER-ID           使用 USER-ID 来签名或者解密

Project-Id-Version: GNU gnupg 2.2.28
Report-Msgid-Bugs-To: [email protected]
PO-Revision-Date: 2021-06-17 11:52+0900
Last-Translator: bobwxc <[email protected]>
Language-Team: None
Language: zh_CN
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Poedit-SourceCharset: UTF-8
X-Poedit-Basepath: .
Plural-Forms: nplurals=1; plural=0;
X-Generator: Poedit 2.2.1
:

(请参考手册页以获得所有命令和选项的完整列表)

例子:

 -se -r Bob [文件]          为用户 Bob 签名和加密
 --clear-sign [文件]        创建一个明文签名
 --detach-sign [文件]       创建一个分离签名
 --list-keys [名字]        列出密钥
 --fingerprint [名字]      显示指纹

请向 <https://bugs.gnupg.org> 报告程序缺陷。
请向 <[email protected]> 邮件列表反映简体中文的翻译问题或建议。

四、生成密钥-输出密钥-上传自己公钥-输入他人公钥

1、生成密钥

# 使用gen-ken参数生成自己的密钥:
gpg --gen-key

root@kali2022:~# gpg --gen-key
gpg (GnuPG) 2.2.35; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

注意:使用 “gpg --full-generate-key” 以获得一个全功能的密钥生成对话框。

GnuPG 需要构建用户标识以辨认您的密钥。

真实姓名: kali2022
电子邮件地址: [email protected]
您选定了此用户标识:
    “kali2022 <[email protected]>”

更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘
、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数
发生器有更好的机会获得足够的熵。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 目录‘/root/.gnupg/openpgp-revocs.d’已创建
gpg: 吊销证书已被存储为‘/root/.gnupg/openpgp-revocs.d/A33A11AFD55A36DE3B7E2A245E0D9B67FB67220E.rev’
公钥和私钥已经生成并被签名。

pub   rsa3072 2022-08-13 [SC] [有效至:2024-08-12]
      A33A11AFD55A36DE3B7E2A245E0D9B67FB67220E
uid                      kali2022 <[email protected]>
sub   rsa3072 2022-08-13 [E] [有效至:2024-08-12]

最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥

# 生成撤销证书
gpg --gen-revoke [用户ID]

root@kali2022:~# gpg --gen-revoke  A33A11AFD55A36DE3B7E2A245E0D9B67FB67220E

sec  rsa3072/5E0D9B67FB67220E 2022-08-13 kali2022 <[email protected]>

要为这个密钥创建一个吊销证书吗?(y/N) y
请选择吊销的原因:
  0 = 未指定原因
  1 = 密钥已泄漏
  2 = 密钥被替换
  3 = 密钥不再使用
  Q = 取消
(也许您会想要在这里选择 1)
您的决定是什么? 0
请输入描述(可选);以空白行结束:
> 
吊销原因:未指定原因
(未给定描述)
这样可以吗? (y/N) y
已强行使用 ASCII 字符封装过的输出。
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: This is a revocation certificate

iQG2BCABCgAgFiEEozoRr9VaNt47fiokXg2bZ/tnIg4FAmL3V2kCHQAACgkQXg2b
Z/tnIg6SPgwAhcNz/WV2KrfxVbhymowngF1MdHqSoUS0TlVjy2t1HLMMLIDYp7Ua
cuOy4KghGp5jkdSYqTWksvHLfqrL/SugHHQ6zuWoMTgx8pqSpremPWgNLvIuLzdh
grdRBHq+Q/dIWmoH3YkLzR+FfZ9fy9A6hw4Oahqbu7VOrBS/sA1OKvrVg8NWosN7
+lQCU1ss0mD0jos2dHnNYuNuXJaRLxpJ70WUDfICU1po7Jc36FABnKxI8IznWgUa
tOslJvClU7870m42yyN4sfFDqVpmAGbq+YV+1DGc9akpLMtEiO1Hnu/tpN4MvPll
DxVPVQ3sMAIZJGDcfmaigLekf/4On+0M7Uy6WOlA+ZiY59UMBKX/SQCXSBrEcJLT
DolXOrkXiZtGb9/L7RpXHvWwMnXbucrQY/xMbf0alheWwFmdY51OwVf3lPXUF09k
kly+gujMrI1R9ljiddjhlnHfaYuBhxxA1vAhL5M6tFpoOG/WO3F05qpoZah1g7R4
XLY/YKF5LhQe
=L+Pw
-----END PGP PUBLIC KEY BLOCK-----
已创建吊销证书。

请把这个文件转移到一个您可以藏起来的介质上;如果坏人获取到了这
份证书的话,那么他就能使用它并让您的密钥无法继续使用。把此证书
打印出来再存放到安全的地方也是很好的方法,以免您的保存媒体变得
不可读。但是千万小心:您机器上的打印系统可能会在打印过程中储存
这些数据,并使得其他人看到!

2、列出密钥

# 列出密钥
root@kali2022:~# gpg --list-keys                                           
gpg: 正在检查信任度数据库
gpg: marginals needed: 3  completes needed: 1  trust model: pgp
gpg: 深度:0  有效性:  1  已签名:  0  信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2024-08-12 进行
/root/.gnupg/pubring.kbx  #公钥文件名(pubring.kbx)
------------------------
pub   rsa3072 2022-08-13 [SC] [有效至:2024-08-12]  # 显示公钥特征(4096位,生成时间)
      A33A11AFD55A36DE3B7E2A245E0D9B67FB67220E      # hash值字符串
uid             [ 绝对 ] kali2022 <[email protected]>  # 显示用户id
sub   rsa3072 2022-08-13 [E] [有效至:2024-08-12]   # 显示私钥特征

3、如果要从密钥列表删除某个密钥,执行delete-key

gpg --delete-key[用户id]

4、输出密钥

公钥文件(/root/.gnnupg/pubring.kbx )以二进制形式存储,armor可以将其转换为ascii码显示

私钥文件()以ascii码形式存储,export-secret-keys参数可以将其转换成二进制文件

# 将二进制公钥文件转换为ascii码显示 
gpg --armor --output public-key.txt --export [用户ID]

# 将ascii码私钥文件转换未二进制公钥我呢见
gpg --armor --output private-key.txt --export-secret-keys

5、上传公钥

公钥服务器是网上专门储存用户公钥的服务器。send-keys参数可以将公钥上传到服务器。然后通过交换机制,所有的公钥服务器都会包含你的公钥。

由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。通常,你可以在网站上公布一个公钥指纹,核对下载到的公钥是否为真。fingerprint参数生成公钥指纹

# 将公钥上传到公钥服务器
gpg --send-keys [用户ID] --keyserver hkp://subkeys.pgp.net

# 生成公钥指纹,核对下载到的公钥是否为真
gpg --fingerprint [用户ID]

6、输入密钥

生成自己的密钥后,还要[import参数]将他人的公钥或者你的其他密钥导入系统。

想要获得他人的公钥,可以让对方直接发给你,或者到公钥服务器上找。

# 将他人的公钥或者你的其他密钥导入系统
gpg --import [密钥文件]

# 获取他人公钥,下载后记得用其他方法验证密钥的真假
gpg --keyserver hkp://subkeys.pgp.net --search-keys [用户ID]

五、加密和解密

1、加密 encrypt

# 对text.txt加密 【encrypt参数用于加密】 
gpg --recipient [用户ID] --output demo.en.txt --encrypt text.txt
# recipient--指定接收者的公钥;
# output--指定加密后的文件名
# encrypt--指定源文件。
# 执行命令后,text.en.txt就是已加密的文件,可以把它发给对方。

2、解密

# 对方收到加密文件后,用自己的私钥解密,解密后的文件内容直接标准输出显示
gpg --decrypt test.en.txt --output test.de.txt
gpg --decrypt test.en.txt
# decrypt--指定需要解密的文件
# output--指定解密后生成的文件
# 执行命令后,test.de.txt就是解密后的文件。

#GPG允许省略decrypt
gpg test.en.txt

六、签名

1、对文件签名

# 有时不需要加密文件,只要对文件签名,表示这个文件确实是我本人发出的;sign--用来签名;
gpg --sign test.txt
# 执行后,生成签名后的文件test.txt.gpg文件,采用二进制储存,
# 如果要生成ASCII码的签名文件,要用clearsign参数。
gpg --clearsign test.txt
# 执行命令后,当前目录下生成test.txt.asc文件,后缀名asc表示该文件是ASCII码形式的。

# 想生成单独的签名文件,与文件内容分开存放,可以用detach-sign
gpg --detach-sign test.txt
# 当前目录下生成一个单独的签名文件test.txt.sig,该文件是二进制形式的,
# 如果想采用ASCII码形式,要加armor参数
gpg --armor --detach-sign test.txt

2、签名+加密

# 同时签名和加密
gpg --local-user [发信者ID] --recipient [接收者ID] --armor --sign --encrypt tst.txt
# local-user---指定用发信者的私钥签名
# recipient---指定用接收者的公钥加密
# armor---表示采用ASCII码形式显示
# sign---表示需要签名
# encrypt---表示指定源文件

3、验证签名

# 收到别人签名后的文件,需要用对方的公钥验证签名是否为真;verify---用来验证
  gpg --verify test.txt.asc test.txt

# https://openvpn.net/网站就提供每一个下载包的gpg签名文件.可以根据它的说明,验证这些下载包是否为真。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/single_g_l/article/details/126320243

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签