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

相关推荐
计算机毕业设计指导1 小时前
基于Spring Boot + Vue 3的社区养老系统设计与实现
vue.js·spring boot·后端
拾忆,想起1 小时前
Redisson 分布式锁的实现原理
java·开发语言·分布式·后端·性能优化·wpf
几颗流星1 小时前
Rust 常用语法速记 - 解构赋值
后端·rust
我想当数字游民1 小时前
Go的切片是什么?一些小细节和容易错的地方
后端·golang
肖焱1 小时前
Java中的集合类有哪些?如何分类的?
后端
野生程序员y1 小时前
Spring DI/IOC核心原理详解
java·后端·spring
是萝卜干呀1 小时前
IIS 部署 asp.net core 项目时,出现500.19、500.31问题的解决方案
后端·iis·asp.net·hosting bundle
从零开始学习人工智能1 小时前
SpringBoot + Apache Tika:一站式解决文件数据提取难题
spring boot·后端·apache
IT_陈寒2 小时前
Python 3.12 的这5个新特性,让我的代码性能提升了40%!
前端·人工智能·后端
华仔啊2 小时前
别再被 Stream.toMap() 劝退了!3 个真实避坑案例,建议收藏
javascript·后端