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

相关推荐
ZHE|张恒7 分钟前
Spring Boot 3 + Flyway 全流程教程
java·spring boot·后端
Mintopia30 分钟前
🧠 Next.js × GraphQL Yoga × GraphiQL:交互式智能之门
前端·后端·全栈
林太白37 分钟前
rust16-职位管理模块
后端·rust
canonical_entropy1 小时前
Nop平台到底有什么独特之处,它能用在什么场景?
java·后端·领域驱动设计
不是株2 小时前
JavaWeb(后端进阶)
java·开发语言·后端
IT_陈寒2 小时前
5个Python 3.12新特性让你的代码效率提升50%,第3个太实用了!
前端·人工智能·后端
Victor3562 小时前
Redis(109)Redis的Pipeline如何使用?
后端
NPE~2 小时前
[手写系列]Go手写db — — 第七版(实现Disk存储引擎、Docker化支持)
数据库·后端·docker·golang·教程·手写数据库
Victor3562 小时前
Redis(108)Redis的事务机制如何实现?
后端