GPG(GnuPG)的安装和使用

article/2025/10/31 19:47:39
基于网络的开源项目,能给用户带来在公共标准基础上的自由发挥,并且能很好地给每个自愿人士提供了共享贡献的机会。但是,同时也因为大众化给使用共享的程序员或团队带来了安全性问题。

当程序员从中央仓库下载第三方构件的时候,下载的文件有可能被另外一个人篡改过,从而破坏代码。为了确定下载的内容是正确的,一般在发布自己构件的同时,还会发布一个签名认证文件。

使用者在使用下载的第三方构件前,先通过签名验证后,确定没有被篡改后再安心使用。GPG 就是这样一个认证签名技术。

接下来就介绍如何使用 GPG 技术,为发布的 Maven 构件签名,从而提高项目的安全性。

GnuPG,简称 GPG,来自 http://www.gnupg.org,是 GPG 标准的一个免费实现。不管是 Linux 还是 Windows 平台,都可以使用。GPGneng 可以为文件生成签名、管理密匙以及验证签名。

下面介绍如何使用 GPG 实现文件签名,并验证签名文件。
下载安装 GPG:访问 http://www.gnupg.org/download,下载适合自己操作系统平台的安装程序。这里下载的是 Windows 平台的 gpg4win-2.3.3.exe。
安装完成后,打开 CMD 窗口,输入 gpg --version,出现下图信息表示安装成功:

图1

生成密钥对:在使用 GPG 之前,先要准备一个密钥对,即一个私钥,一个公钥。这样才能使用私钥对文件进行签名,将公钥分发到公钥服务器供其他用户下载,其他用户就可以使用公钥对签名进行验证。

在 CMD 命令行中,输入 gpg --gen-key命令生成密钥对。

在 GPG 执行过程中会提示如下几个信息。

生成密钥类型,如下图所示:

图2

通过输入 1 或直接按 Enter 键(默认),选择第 1 项。

RSA keys 的大小,如下图所示:

图3

输入一个介于 1024 到 4096 之间的整数,或直接按 Enter 键(默认 2048)。这里直接按 Enter键,选择的是 2048。

密钥有效期,如下图所示:

图4

输入密钥有效时长,默认是 0,表示永不过期,输入一个数字 n,表示有效期为 n 天,当然也可以输入 nw、nm、ny,分别表示 n 周、n 月和 n 年。这里选择的是直接按 Enter 键,表示永不过期。

提示前面的选择是否正确(是否确认)。输入 y,表示确认;输入 n,表示要重新输入有效期。接下来的信息,是为了生成 GPG 唯一用户 ID 的信息。

输入开发者或团队名,如下图所示:

图5

  • 作为演示,这里输入 mengma。
  • 联系邮箱地址输入 1164574028@qq.com。
  • 备注输入:this is a demo for maven。
这时候会提示如下信息,显示生成的 USER-ID,如下图所示:

图6

中间 mengma(this is a demo for maven)<1164574028@qq.com>为使用者 ID。

修改生成 USER-ID 的信息:

  • 输入 N、C、E,分别用来修改名称、备注和邮件地址信息。
  • 输入 Q 表示退出。
  • 输入 O 表示进入下一步。
这里输入 O,按 Enter 键。输入私钥密码:这里输入自己的密码作为演示,输入的 12345678。接下来 GPG 会提示下图信息,表示密钥对已经生成:

图7

查看公钥和私钥信息:在 CMD 命令行窗口中输入 gpg --list-keys,查看本地公钥信息,列表如下图所示:

图8


第一行显示公钥文件和所在的位置。
  • pub 行描述的是公钥大小(2048)/公钥 id(DDAAB5A8),公钥产生日期(2019-08-07)。
  • uid 行描述的是由名称、备注和邮件地址组成的字符串。
  • sub 行表述的是公钥的子钥(可以不用关心)。
在 CMD 命令行窗口中输入 gpg --list-secret-keys,查看本地私钥信息,列表如下图所示:

图9

第一行显示密钥文件和所在的位置。

  • sec 行描述的是密钥大小(2048)、id(DDAAB5A8)和产生日期(2019-08-07)。
  • uid 行描述的是由名称、备注和邮件地址组成的字符串。
  • ssb 行描述的是密钥的子钥(可以不用关心)。
给文件创建签名文件:打开 CMD 命令行窗口,切换到 IMvnDemoDAO.java 文件所在的目录。输入 gpg-ab IMvnDemoDAO.java 命令,再输入前面生成密钥时输入的密码 12345678,会在当前目录下生成一个名叫 I MvnDemoDAO.java.asc 的签名文件。

分发公钥文件:为了让用户能方便地获取公钥文件,对下载的文件进行验证,需要将公钥文件发布到公共的公钥服务器上,如 hkp://pgp.mit.edu 是美国麻省理工学院提供的公钥服务器。

打开 CMD 命令行窗口,将目录切换到公钥文件所在的目录,输入如下命令将公钥文件分发到公钥服务器。
gpg --keyserver hkp://pgp.mit.edu --send-keys DDAAB5A8
“hkp://pgp.mit.edu”是公钥服务器名称。DDAAB5A8 是要发布的公钥 id(前面生成的密钥对中的公钥)。

显示如下信息,表示发布成功。
gpg: sending key DDAAB5A8 to hkp server pgp.mit.edu
有一点需要说明的是,只需往一台服务器上发布公钥就行,其他公钥服务器会自动同步。

导入公钥服务器上的公钥:为了验证下载的文件是否准确,需要先从公钥服务器上下载对应的公钥,导入本地 GPG 服务器中,才能使用 GPG 完成对下载文件的验证。

在 CMD 命令行窗口中输入 gpg--keyserver hkp://pgp.mit.edu--recv-keys DDAAB5A8 ,下载 DDAAB5A8 对应的公钥。

注:因为本地已经有这个公钥,所有下载后提示没有改变。

使用公钥验证下载的文件:打开 CMD 命令行窗口,切换到下载文件所在的目录(原始文件和签名文件),输入命令如下:
gpg --verify IMvnDemoDAO.java.asc
使用签名验证 IMvnDemoDAO.java 文件。

到现在为止,已经完成了 GPG 的安装、签名、分发和验证的流程。以后的 Maven 项目就可以直接使用现在生成的密钥对发布文件签名。

http://chatgpt.dhexx.cn/article/kZGBca0A.shtml

相关文章

gpg使用

https://blog.csdn.net/weixin_42559321/article/details/82147888 https://www.cnblogs.com/wanghongli/archive/2018/01/08/8241809.html rpm2cpio *.rpm | cpio -imd       #解压一个rpm包rpm -ivh *.rpm --force       #强制安装这个rpm包rpm -iv…

如何在Git中使用GPG

开篇之前,先给大伙看点东西 是不是很想要?你找对地方了! 下面是教程: 在 “开始”菜单 打开Git Bash 输入 gpg --gen-key 显示如下 $ gpg --gen-keygpg (GnuPG) 2.2.13-unknown; Copyright (C) 2019 Free Software Foundation, Inc.This …

成功解决gpg: 找不到有效的 OpenPGP 数据

在Ubuntu系统上安装docker时出现gpg: 找不到有效的 OpenPGP 数据的报错 解决方案: wget https://download.docker.com/linux/ubuntu/gpg sudo apt-key add gpg随后再次执行下载指令,解决报错 成功解决gpg: 找不到有效的 OpenPGP 数据的报错 欢迎小伙…

GPG Overview

Overview PGP目前支持的算法 非对称算法: RSA, ELG, DSA, ECDH, ECDSA, EDDSA对称算法: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256哈希算法: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224压缩算法: Uncompres…

GPG 使用初步

GPG 使用初步 1. PGP 软件的安装 PGP 的版本有很多,但由于其商业软件的特性,不能自由使用,自由软件基金会决定开发一个 PGP 的替代品,取名为 GnuPG ,这就是 PGP 的由来   GPG 是基于命令行的程序,主要面…

gpg加解密软件学习

为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真正的密码。 为了不让其他人看到真正的邮箱密码,我们需要对其进行加密。 加密的方式是先把密码先写到一个文件A中,然后使用相关的加密软件对该文件…

java动态代理

java动态代理实现与原理详细分析 原文地址 关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。 一、代理模式 代理模式是常用的java…

动态规划 --- 算法思想介绍

一.动态规划的基本概念 动态规划在五种算法设计方法中难度最大,它建立在最优原则的基础上.采用动态规划方法,可以高效地解决许多用贪婪算法或分治法无法解决的问题.动态规划(dynamic programming)属运筹学中的规划论分支,是求解决策过程最优…

动态规划算法详解

动态规划算法通常用于求解具有最优性质的问题 基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划(DP)。…

动态规划原理

1. 基本概念 动态规划通过拆分问题,将问题拆分成许多的子问题,定义问题状态和状态之间的关系(即状态转移方程或递推公式),使得问题能够以递推(或者说分治)的方式去解决。按顺序求解子问题&…

动态代理详解

想要更加透彻的理解动态代理,首先要熟悉下静态代理 一、静态代理 总结来说:目标类和代理类实现了相同的接口,在代理类中依赖了目标类,代理类的方法中调用了目标类的方法,并做了一些增强性的工作。 1、实现静态代理&…

CAD动态块制作

CAD动态块制作 拉伸动态块柜体A拉伸动态块制作第一步:制作柜体A第二步:进入块编辑器编辑第三步:关闭块编辑器 柜体B拉伸动态块制作第一步:制作柜体B第二步:进入块编辑器第三步:关闭块编辑器 可见性动态块第…

数据有效性 动态选择

EXCEL有两列数据栏,A列和B列,都是通过下来框来选择,要求A列选择完成后,B列动态调整可选择的内容。例如:第一例选择“AA”,第二列可供选择的范围是“a-d”;第一例选择“BB”,第二列可…

OTP 动态口令验证

OTP 动态口令验证。 简介 动态口令(OTP,One-Time Password)又称一次性密码,是使用密码技术实现的在客户端和服务器之间通过共享秘密的一种认证技术,是一种强认证技术,是增强目前静态口令认证的一种非常方…

loj#122.「强制在线」动态图连通性

loj#122. 「强制在线」动态图连通性 UPD:(7个月以后)这代码被叉了,我不想改了( negii真dl 然后发现这格式一更新…啊我的公式和链接怎么假掉了( csdn[] 算了不管了…反正这样子的话之后也不会用了( 题意 N 个点,M 次操作,支持加边/删边/询问两点间连通性。 强制在线。…

ORL、Yale等人脸数据库百度云链接

近段时间做人脸识别的实验,收集了几个人脸库,如图 这里放出百度云的链接,需要的自取 链接:https://pan.baidu.com/s/11_7bFdo_hhc83WQXmWtxvw 提取码:5ohd 强推这个文章,里面有16个人脸库的百度云链接 ht…

ORTP

1.为什么要使用RTP 一提到流媒体传输、一谈到什么视频监控、视频会议、语音电话(VOIP),都离不开RTP协议的应用,但当大家都根据经验或者别人的应用而选择RTP协议的时候,你可曾想过,为什么我们要使用RTP来进行…

oracle中or的使用,Oracle Or

oracle函数 的 Oracle Or 在本教程中,我们来学习如何使用Oracle OR运算符来组合两个或更多的布尔表达式。 Oracle OR运算符介绍 OR运算符是一个逻辑运算符,它组合了布尔表达式,如果其中一个表达式为真(true),则返回true。 以下说明OR运算符的语法: expression_1 AND expre…

基于PCA方法的ORL人脸识别及Python代码实现

基于PCA方法的ORL人脸识别及Python代码实现 PCA算法方案设计代码实现结果分析参考文献 PCA的理论知识已经有很多博客做了清晰的解释,主要概括为找到投影的面使得类间误差最大,转化为找到构建的协方差的特征值与特征向量,在新的投影方向&#…

ORL Character Recgnition

文章目录 ORL Character Recgnition0 Abstract1 Introduction2 Related Work2.1 Character recognition2.2 Text detection 3 Connection Text Proposal Network3.1 Anchor3.2 Bi-Directional LSTM3.3 RPN layer3.4 Text line constructor3.5 Loss function3.6 Total system3.7…