GPG 你又了解多少呢?

前提

今日愉快地Coding,当写完后进行commit,发现出错了,报错如下:

在网上查了一轮资料后,有很多奇奇怪怪的答案。最后锁定了,其实是我的GPG KEY 过期了。这篇文章想从零开始了解GPG以及Git的GPG配置

什么是GPG

以下是引用阮一峰的GPG入门教程:

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

GPG是一种PGP标准的实现。可以使用其公钥和私钥对数据进行加密、解密、签名操作。

GPG的使用

GPG的安装

GPG的安装可以参考官网提供的方式,下载对应的包文件进行安装

生成GPG KEY

安装成功后,使用gen-ken参数生成自己的密钥。

css 复制代码
gpg --gen-key

如下图所示,其中红色部分为KEY ID

使用GPG 加密

css 复制代码
gpg --recipient [KEY ID] --output demo.en.txt --encrypt demo.txt

使用GPG 解密

css 复制代码
gpg --decrypt --output [解密后的文件] [加密的文件]

其余GPG指令

还有其余GPG指令,这里就不一一介绍了

  • gpg --list-key (列出所有key)
  • gpg --delete-key [KEY ID] (删除KEY)
  • gpg --armor --output public-key.txt --export [KEY ID] (输出公钥)
  • gpg --armor --output private-key.txt --export [KEY ID] (输出私钥,私钥请妥善保管)
  • gpg --sign [文件] (会在同目录下生成一个[文件].gpg的二进制签名文件)
  • gpg ---clearsign [文件] (会在同目录下生成一个[文件].gpg的ASCII签名文件)
  • gpg --detach-sign [文件] (会在同目录生成一个单独的[文件].sig 二进制签名文件,与文件内容分开存放)
  • gpg --armor --detach-sign [文件] (会在同目录生成一个单独的[文件].sig ASCII签名文件,与文件内容分开存放)
  • gpg --verify [单独的签名文件] [数据文件] 如下:
vbnet 复制代码
gpg --verify test.txt.sig test.txt
响应结果如下:
gpg: Signature made Sat Jul 29 15:38:34 2023
gpg:                using RSA key E4C50A2B0A2C0AA               5E8400386FB582F24A67B8336
gpg: Good signature from "ymbcxb" [ultimate]
  • gpg --local-user [发送者的KEY ID] --recipient [接收者(公钥) KEY ID] --armor --sign --encrypt demo.txt (如 A发送B,A用A的私钥签名,用B的公钥进行加密;B接受到信息后用A的公钥进行验签,用B的私钥进行解密)
  • gpg --edit-key [KEY ID] (编辑KEY信息,进入GPG控制台,在控制台输入expire控制控制KEY的过期时间)

GPG在Git上的应用

GPG在Git上主要是使用其签名功能,防止他人伪造篡改自己的commit info。 有时候我们可以在GitHub上看到以下情形(这里找的Mybatis的commit信息): 会有一个Verified的绿色Logo,这就如同HTTPS的绿色小锁一样亮眼。

如果没有使用GPG,你的commit信息是可以被人篡改的

css 复制代码
git commit --amend --author="fake <fake.com>" --no-edit
git push --force

GPG在GitHub上的使用

在Github的Settings的SSH-GPG Keys 可以New 一个GPG KEY 使用上面的指令,输出公钥,将公钥拷贝到Github上

scss 复制代码
gpg --armor --export [KEY ID] (输出公钥)

git上绑定GPG KEY

lua 复制代码
git config --global user.signingkey {key_id}

设置自动签名

arduino 复制代码
git config --global commit.gpgsign true

总结

原本是从GPG KEY的过期的现象到摸索了解GPG,学习了GPG的相关操作。 其实关于Git上的GPG KEY也不用过分注重,其实很多开源项目也并非都是有做GPG 签名的, 就算在企业中,篡改他人信息在Git Reviewer中也是会被发现的。 但是多一个绿色小锁,谁又不爱呢? 本篇到此结束

相关推荐
期待のcode3 小时前
MyBatisX插件
java·数据库·后端·mybatis·springboot
华仔啊6 小时前
这 10 个 MySQL 高级用法,让你的代码又快又好看
后端·mysql
码事漫谈7 小时前
国产时序数据库崛起:金仓凭什么在复杂场景中碾压InfluxDB
后端
上进小菜猪7 小时前
当时序数据不再“只是时间”:金仓数据库如何在复杂场景中拉开与 InfluxDB 的差距
后端
盖世英雄酱581367 小时前
springboot 项目 从jdk 8 升级到jdk21 会面临哪些问题
java·后端
程序猿DD8 小时前
JUnit 5 中的 @ClassTemplate 实战指南
java·后端
Victor3569 小时前
Netty(14)如何处理Netty中的异常和错误?
后端
Victor3569 小时前
Netty(13)Netty中的事件和回调机制
后端
码事漫谈10 小时前
VS Code 1.107 更新:多智能体协同与开发体验升级
后端