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中也是会被发现的。 但是多一个绿色小锁,谁又不爱呢? 本篇到此结束

相关推荐
深蓝AI8 小时前
Python 3.13 的 Queue.shutdown:异步消费者终于能正常收工了
后端
武子康9 小时前
MultiNet6 空闲崩溃:`EXCVADDR=0x8` 后又出现 `CORRUPT HEAP`
人工智能·后端·agent
武子康10 小时前
MultiNet7 每轮都 clean,ESP32-P4 内存为什么还在掉?
人工智能·后端·agent
超级架构师10 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
陈随易11 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员
IT_陈寒12 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
starzy199013 小时前
Scala类和对象:从构造器到样例类的完整指南
开发语言·后端·scala
梦影_13 小时前
MySQL进阶教程(五)—— SQL调优(下)
android·大数据·数据库·后端·sql·mysql·database
考虑考虑13 小时前
mariadb数据库
数据库·后端·mariadb
明月_清风14 小时前
用自然语言操控真机:Google Artemis 移动端 AI Agent 上手与实践
人工智能·后端