关于PGP & GPG文件加密有这篇就够了


前言

最近要对接亚马逊PSP,需要用到GPG对文件进行加密,记录一下,共勉。
另外说一点,GPG是PGP的升级款,支持的加密方式更多,GPG是开源的,而PGP是Symantec公司的版权。
所以,我们常说的PGP文件加密,就可以使用GPG方式来搞就可以。

什么是PGP 和 GPG?

PGP =Pretty Good Privacy。就是一套用于加密,解密或者签名的应用程序。
而GPG就是 GnuPG 也就是 GNU Privacy Guard 。一般用来加密文件:可以生成密钥对、签名/验签、加密/解密等操作。
GPG官网为:https://www.gnupg.org/
官方操作文档:https://www.gnupg.org/gph/en/manual.html
基础入门可参考阮一峰老师的博客:http://www.ruanyifeng.com/blog/2013/07/gpg.html
不过文中有几处错误,不知道是版本更新了还是笔误,大部分还是没问题的。

快速开始

一、安装

直接访问选择安装包下载:https://sourceforge.net/p/gpgosx/docu/Download/

二、秘钥管理

2.1 生成秘钥对

执行命令:gpg --full-gen-key 会出现如下结果。

gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory '/Users/yunnasheng/.gnupg' created
gpg: keybox '/Users/yunnasheng/.gnupg/pubring.kbx' created
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card

默认选择第一个选项,表示加密和签名都使用RSA算法,我们可以输入序号:1,它会提示密钥的长度是否想要3072,一般超过2048即可,我们直接敲回车。

Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072)

直接回车后会有如下提示:需要你设置有效期,我这里选择了5y(5年),当然你也可以输入0永久有效。

Requested keysize is 3072 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 5y
Key expires at 日 4/26 11:26:14 2026 CST
Is this correct? (y/N) y

接着它会提示你是否要这么设置,我们输入y同意,系统就要求你提供个人信息。

GnuPG needs to construct a user ID to identify your key.

Real name: yunnasheng
Email address: yunnasheng@google.com
Comment: this is remark
You selected this USER-ID:
"yunnasheng (yunnasheng) yunnasheng@google.com"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

它会再次确认是否要修改以上的任何信息,如果不修改输入O(这个不是零,是O)
接着,系统会让你设定一个私钥的密码,一定要牢记这个密码!!!之后想对秘钥做修改必须要有这个密码。

##
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

#然后,系统就开始生成密钥了,这时会要求你做一些随机的举动,以生成一个随机数。(晃晃鼠标即可)
gpg: /Users/yunnasheng/.gnupg/trustdb.gpg: trustdb created
gpg: key 1DBE410655341854 marked as ultimately trusted
gpg: directory '/Users/yunnasheng/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/Users/yunnasheng/.gnupg/openpgp-revocs.d/6C8750D530B7BEF0BE86D7E81DBE410655341854.rev'
public and secret key created and signed.

pub rsa3072 2021-04-27 [SC] [expires: 2026-04-26]
6C8750D530B7BEF0BE86D7E81DBE410655341854
uid xxx (xxx) xxx@google.com
sub rsa3072 2021-04-27 [E] [expires: 2026-04-26]

请注意上面的字符串1DBE410655341854,这是USER-ID的Hash字符串,可以用来替代USER-ID。

2.2 生成撤销证书

生成"撤销证书"是为了以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。(可选,你也可以不操作这一步)
命令为:gpg --gen-revoke [用户ID]

gpg --gen-revoke 1DBE410655341854
# 输出结果为:
sec  rsa3072/1DBE410655341854 2021-04-27 yunnasheng (yunnasheng) <yunnasheng@google.com>

# 是否为这个Key生成撤销证书?输入 y 同意
Create a revocation certificate for this key? (y/N) y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
# 提示让输入一个原因
Your decision? 0
Your decision? 0
Enter an optional description; end it with an empty line:
>
Reason for revocation: No reason specified
(No description given)
Is this okay? (y/N) y

选择没有任何原因,输入y同意

ASCII armored output forced.
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: This is a revocation certificate
# 这里我用星号代替了一些敏感数据
iQG2B(********************)CAQFAmCHh1gCHQAACgkQHb5B
BlU0GFRLXwv+PBWkET+NHQzybH5XQgo1ml30QqYFqRN9uGci9Py+VJMW5N4zy4dF
GqMFyTZ++N+LbckyKLBrF/YionqqCe2wxOVWhcMd+ceFcgNW6mwp3GocFLxC3mc4
RwIezzZNUqee36MOoZoDKAQDdwurhj88+5/XGfaJ6BNvszsn80lBwHPvbQdUH9Uc
/bKxOIaxdUbGvDhZ6uqIq9mwqLetT6r0OgPJJQ3/OLJcF7e4K90D/uYRpPAtKuBy
++fOPM4fGifmVMCpBLtn/r8JfxMHcd4uMauscUvI7juv9UWvq0mOrx7SaUPDCXhz
FjfVrnDbd5RrxbqmXPd3nh2aTx2+0RAS/bH3YInHtHLsXL8X5S59sUFN8zsV1cqa
gEEO/c4NJia1JTbVK2bf5Rz4R9RpbsGuYVR7BQbr3f0IKxXyzRKMhbONqevyiphM
2JNSbeJ0VrpS+TodxLGRFLkwgekj8x0jk6pUDjuPp9qeGdNysSsnX/sTJuLnjCZT
zMSN+Vjtgssu
=hjYa
-----END PGP PUBLIC KEY BLOCK-----
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!

2.3 上传到GPG公共服务

可以使用命令行选项--send-key将一个或多个密钥发送到密钥服务器。(这个是可选的,上传公共服务的好处就是大家都认可这个平台,认为这上面的公钥都是安全的,当然你可以直接导出文件发给对接方)
密钥服务器是通过命令行选项--keyserver指定的。
语法:gpg --keyserver <gpg共享服务域名> --send-key <Your key ID>

在终端执行命令:

gpg --keyserver hkp://pgp.mit.edu --send-key 1DBE410655341854
# 等待数秒结果如下:
gpg: sending key 1DBE410655341854 to hkp://pgp.mit.edu

验证
gpg --keyserver <服务名> --recv-keys <Your ID>

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys F2184XXX4BB5BB
gpg: key F21846371E4BB5BB: "yunnasheng <yunnasheng@google.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

可选服务器地址:
hkp://pool.sks-keyservers.net
hkp://pgp.mit.edu
certserver.pgp.com // 这个国内比较卡,可能超时。

2.4.导出公私钥

导出公钥:gpg --armor --output <文件路径及名称> --export <key ID>
简写:gpg -a -o public-file.key --export <key ID>
终端执行:

 gpg --armor --output public.key --export 1DBE410655341854

导出私钥:(注意:导出私钥时需要输入保护私钥的密码)

gpg --armor --output private.key --export-secret-keys

2.5.导入公钥

gpg --import public.key

三、加解密及签名

3.1 加密文件

语法:gpg -r <key-id> [-o <output-file>] [-a] -e [<input-file>]
参数说明:

  • -r/--recipient:指定接受者的公钥 ID,消息将会使用这个公钥进行加密,也就是只有拥有这个私钥的人才能解密信息。可以指定多个,则多个接受者都能解密信息。
  • -o/--output:指定加密后的信息输出到哪个文件。
  • -a/--armor:将加密后的信息转为可打印的 ASCII 字符。如果不指定将会输出二进制信息。
  • -e/--encrypt:加密。
  • <input-file>:要加密的文件。可选,如果不指定将会从标准输入读取。

实际案例:

gpg -r E79FB288FB11D6C25459E631479FE363DC53382F -o test.txt -e DEMO2.txt

3.2 解密文件

语法:gpg [-o <output-file>] -d [<input-file>]
参数说明:

  • -o/--output:指定解密后的信息输出到哪个文件。可选,如果不指定将输出到标准输出。
  • -d/--decrypt:解密。
  • <input-file>:待解密的文件。可选,如果不指定将尝试从标准输入读入。
    实际案例:
gpg -o testdec.txt -d test.txt
  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
内有详细的图片说明及文字 PGP是目前最优秀,最安全的加密方式。这方面的代表软件是美国的PGP加密软件。这种软件的核心思想是利用逻辑分区保护文件,比如,逻辑分区E:是受PGP保护的硬盘分区,那么,每次打开这个分区的时候,需要输入密码才能打开这个分区,在这个分区内的文件是绝对安全的。不再需要这个分区时,可以把这个分区关闭并使其从桌面上消失,当再次打开时,需要输入密码。没有密码,软件开发者本人也无法解密!PGP是全世界最流行的文件加密软件。它的源代码是公开的,经受住了成千上万顶尖黑客的破解挑战,事实证明PGP是目前世界上最安全的加密软件。它的唯一缺点是PGP目前还没有中文版,而且正版价格极其昂贵。因为PGP技术是美国国家安全部门禁止出口的技术。汉化中文版的PGP我还没有发现过。 PGP (Pretty Good Privacy) 是一个可以让您的电子邮件 (E-Mail) 拥有保密功 能的程式。藉此您可以将您的邮件加密 (Encrypt) ,除了您希望的人看得到以外, 没有其它人可以解读。一但加密后,讯息看起来是一堆无意义的乱码 (Random Characters) 。PGP 提供了极强的保护功能,即使是最先进的解码分析技术也无法解 读 (Decrypt) 加密后的文字。 PGP 加密与解密不像其它传统加密的方式,而是利用所谓的公开钥匙密码学 (Public Key Cryptology) 为基础。举例来说,当您要传送一封保密信或档案给笔者 时,必须先取得笔者的公开钥匙 (Public Key) ,并且将它加入您的公开钥匙环 ( Public Keyring) 中,然后利用笔者的公开钥匙将信件加密。当笔者收到您加密的信 件后,笔者必须利用其相对的私人钥匙 (Secret Key) 来解密。因此,除非其他人拥 有笔者的私人钥匙,否则无法解开您所加密的信件。同时,笔者在使用私人钥匙解密 时,还必须输入通行码 (Pass Phrase),如此又对加密后的讯息多了一层保护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值