首页 > 其他分享 >GPG 用法

GPG 用法

时间:2024-03-21 23:23:28浏览次数:25  
标签:公钥 -- gpg 用法 GPG 密钥 file ID

GPG (GnuPG) 是一种加密工具,用于数据加密和数字签名。

密钥配置

# 生成密钥
gpg --full-generate-key

# 列出密钥
gpg --list-keys  # 列出公钥
gpg --list-secret-keys  # 列出私钥

# 导出密钥
gpg --armor --export [email/ID] > public.asc  # 导出公钥
gpg --export-secret-keys -a [email/ID] > private.asc  # 导出私钥

# 导入密钥
gpg --import [key_file]  # 导入密钥
gpg --sign-key [email/ID]  # 为导入的密钥签名(信任)

# 删除密钥
gpg --delete-key [email/ID]  # 删除公钥
gpg --delete-secret-key [email/ID]  # 删除私钥

# 编辑密钥
gpg --edit-key [email/ID]

# 更改密钥密码
gpg --passwd [email/ID]

密钥 ID 是密钥指纹的后 8 位或者后 16 位,或者完整的密钥指纹。三者之一都可以用来表示密钥 ID。

加密/签名

# 加密
gpg --recipient [email/ID] --encrypt [input_file]  # 将生成一个 .gpg 文件,包含了加密的文件

# 解密
gpg --decrypt [gpg_file] > [output_file]

# 签名
gpg --sign [input_file]  # 将生成一个 .gpg 文件,包含了明文文件和文件签名

## 使用分离签名
gpg --detach-sign [input_file]  # 将生成一个 .sig 二进制文件
gpg --armor --detach-sign [input_file]  # 将生成一个 .asc 文本文件

# 验证签名
gpg --verify [signature_file] [input_file]  # 可以省略 input_file,此时会以 signature_file 的文件名推测输入文件名
              # 另外,也可以使用 --decrypt 在解密的同时验证签名

# 签名并加密
gpg --sign --recipient [email/ID] --encrypt [input_file]

# 解密并验证签名(和仅解密的命令一样)
gpg --decrypt [gpg_file] > [outputfile]

使用样例

列出所有公钥

$ gpg --list-keys
[keyboxd]
---------
pub   ed25519 2023-12-28 [SC]
      564B356F76DEDA922C87D9A6ADA20CA03D7C43B
uid             [ 绝对 ] User Name (Default GPG Key) <[email protected]>
sub   cv25519 2023-12-28 [E]
  • pub: 这行表示一个公钥 (pubkey) 的记录开始。
  • ed25519: 这是公钥使用的加密算法,ed25519 是一个采用 Edwards-curve Digital Signature Algorithm (EdDSA) 的签名算法,它著名的特点是速度快且安全。这种算法特别适用于创建数字签名。
  • 2023-12-28: 这个日期是公钥的生成日期。
  • [SC]: 这里的 S 表示签名(Sign),C 表示证书(Certify)。这意味着这个公钥可以用于数字签名和证书其他密钥。
  • 564B356F76DEDA922C87D9A6ADA20CA03D7C43B: 这是公钥的指纹,是识别公钥的一种更精确的方式。它是公钥的一个散列值,可用于在密钥服务器上查找公钥或验证公钥。
  • uid: 这个字段代表用户身份(User ID),包括名称和电子邮件地址。在这个例子中,表示公钥的拥有者是 “User Name” 且电子邮件地址为 “[email protected]”。
  • [ 绝对 ]: 这表明信任级别为 “绝对”。在 GPG 中,你可以给一个密钥指定信任级别,以标识你对此密钥所有人身份验证的信任程度。“绝对” 表示你完全信任此密钥。
  • sub: 这表示一个附属密钥 (subkey),它关联到上面的主公钥。附属密钥可以用于加密,而主密钥仍然保持签名和证书的任务。
  • cv25519: 这是附属密钥使用的加密算法,Curve25519 是一种用于创建公钥加密密钥的算法。cv25519 通常用于加密。
  • [E]: 这表示这个附属密钥用于加密 (Encrypt)。

总的来说,这个输出表示你有一个用 ed25519 算法生成的 GPG 主公钥,它在 2023 年 12 月 28 日生成,并有一个用户身份名为 “User Name” 和对应的电子邮件地址。你还有一个用 cv25519 算法生成的附属密钥用于加密,它也是在同一天生成的。

列出所有私钥

$ gpg --list-secret-keys
[keyboxd]
---------
sec   ed25519 2023-12-28 [SC]
      564B356F76DEDA922C87D9A6ADA20CA03D7C43B
uid             [ 绝对 ] User Name (Default GPG Key) <[email protected]>
ssb   cv25519 2023-12-28 [E]
  • keyboxd 部分是内部的,通常你不需要关心;它跟 GPG 的密钥存储有关。
  • sec 表示这是一段私钥(secret key)的信息。ed25519 是私钥使用的加密算法,这里采用的是 Ed25519,一种基于 EdDSA 签名算法的公钥加密算法。Ed25519 被认为是非常安全的,主要用于签名操作。
  • 2023-12-28 表示私钥的生成日期是 2023年12月28日。
  • [SC] 表示这把私钥具有签名(S)和证书(C)的能力。签名用于保护信息和验证作者的身份,而证书能力意味着这把钥匙可以用来为其他的公钥签名,建立信任网络。
  • 56EBD36FC71AEDC622DE749A43DA00CC0D17643C 是私钥的指纹。这是一个独特的标识,用于确切地指代这把私钥。在 GPG 的使用中,指纹用来验证密钥的真实性。
  • uid 表示用户 ID,这是密钥所有者的身份说明。[ 绝对 ] 表示对该密钥的信任等级是绝对的,即这把密钥完全被信任。User Name (Default GPG Key) [email protected] 包含名字、评论(这里用作标识默认的 GPG 密钥)、以及电子邮件地址,这是用来标识密钥所有者的信息。
  • ssb 是指私钥下的子密钥(secret subkey)。cv25519 指明了子密钥使用的加密算法是 Curve25519,这通常用于加密操作。2023-12-28 是子密钥的生成日期。
  • [E] 表示子密钥的用途是加密(E)。

加密文件

gpg --recipient [email protected] --encrypt my_file

解密文件

gpg --decrypt my_file.gpg > my_file

标签:公钥,--,gpg,用法,GPG,密钥,file,ID
From: https://www.cnblogs.com/Undefined443/p/18088400

相关文章

  • C语言中的printf和sprintf的用法及区别
    sprintf函数是C语言中用于格式化输出到字符串的函数。它的原型如下:intsprintf(char*buffer,constchar*format,[argument]…);str:指向存储输出结果的字符数组的指针。format:格式化字符串,包含要输出的文本和格式说明符。[argument]:可变参数列表,用于提供要插入格式化......
  • 正则表达式具体用法大全
     #正则表达式:##单字符匹配:```python#匹配某个字符串:#text="abc"#ret=re.match('b',text)#print(ret.group())#点(.):匹配任意的字符(除了'\n'):#text="\nabc"#ret=re.match('.',text)#print(ret.group())#\d:匹......
  • docker 的常见用法
      #docker安装mysqlsudodockerpullmysql:5.7#docker启动mysqlsudodockerrun-p3306:3306--namemysql\-v/mydata/mysql/log:/var/log/mysql\-v/mydata/mysql/data:/var/lib/mysql\-v/mydata/mysql/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmysql......
  • ThreadLocal详解及用法示例
    ThreadLocal概念ThreadLocal 是Java并发包(java.util.concurrent)中提供的一个类,它的主要作用是在多线程环境下为每个线程提供一个独立的变量副本,使得每个线程在访问 ThreadLocal 时获取到的都是自己的私有变量,而不是共享的同一个变量。换句话说,ThreadLocal 能够隔离线程间......
  • fileinputstream的主要用法
    importjava.io.*;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{//字节流读数据//FileInputStreamfileInputStream=newFileInputStream("C:\\\\Users\\\\31339\\\\Desktop\\\\新建文件夹(7)\\\......
  • javascript:void(0);用法及常见问题解析
    javascript:void(0);是一个常见的JavaScript代码片段,通常用于在HTML中作为超链接的href属性值或者事件处理函数的返回值。下面是关于它的用法和常见问题的解析:用法:作为超链接的href属性值:<ahref="javascript:void(0);">点击这里</a>这样做的作用是让点击链......
  • C#中的params的用法(可变数组)
    最近小编看C#视频,听到小杨老师讲到可变数组,涉及到一个param修饰符,有点不太明白,于是小编站在巨人的肩膀上开始了探索和学习,略有了解,分享给大家哟~【一】params是什么?params是一个计算机函数,表示函数的参数是可变个数的,即可变的方法参数,用于表示类型相同,但参数数量不确定。C#开发语......
  • java lambda简单用法
    一、背景介绍        lambda表达式不算是什么新奇的东西,jdk8诞生也好多年了,但是lambda表达式据我观察,在我多年的开发生涯中,周围同事用的其实不多,具体原因可能还是说不了解,习惯了过去的编程方式等等,其实自己不了解的东西不要抗拒,个人理解都是一个熟悉的过程,熟练以后也......
  • 操作系统实验-与文件读写有关的系统调用函数用法
    1、open函数点击查看代码#include<fcntl.h>//头文件intopen(constchar*pathname,intflags,mode_tmode);pathname:要打开文件的路径名;flags:用于指定文件的打开方式和行为,以下是一些常见的标志,都通过宏进行了定义;O_RDONLY:只读方式打开文件。O_WRONLY:只写方式打......
  • Excel新函数TEXTJOIN太强大了,这些高级用法太实用了
    今天跟大家分享WPS中新函数TEXTJOIN的使用方法和技巧,它不仅仅是一个强大的文本连接函数,还有一些高级用法可以帮助我们快速解决日常难题。TEXTJOIN函数介绍作用:TEXTJOIN函数是文本连接函数,使用分隔符连接列表或文本字符串区域。语法:=TEXTJOIN(分隔符,忽略空白单元格,字符串......