加解密 #
以发送方和接收方表示两边
简单流程概括 #
- 接收方生成密钥对,导出公钥分享给发送方。
- 发送方接收公钥,导入公钥。使用公钥对数据进行加密,发送给接收方。
- 接收方使用私钥对数据进行解密。
情境操作 #
情景代入:xiang需要发送一份重要文件给yalois
- 接收方:yalois
- 发送方:xiang
- yalois生成密钥对(如果yalois没有的话)
gpg --full-generate-key
按照提示选择密钥类型、大小、过期时间等,最后输入用户信息和密码。
这里是Yalois的基本信息。
生成之后可以通过gpg --list-keys
来列出密钥。
- yalois导出公钥给xiang。
gpg --export [用户ID] > public_key.asc
这个导出的是二进制数据。
可以用gpg --export -a [用户ID]> public_key.txt
以ASCII码导出。
GPG有网络上专门储存用户公钥的服务器。我直接发送给了xiang。
- xiang导入Yalois的公钥
gpg --import [密钥文件]
4.xiang使用公钥对文件进行加密发送
gpg --encrypt --recipient [公钥用户ID] [加密文件]
message.txt
Yalois是这个世界上最帅的人。
我用gpg --encrypt --recipient Yalois message.txt
用Yalois的公钥加密。
会生成message.txt.gpg
文件。把这个文件发给Yalois。
- Yalois对xiang发来的文件进行解密
gpg --decrypt message.txt.gpg
解密会要求输入创建密钥对时设置的密码。
GPG对文件进行数字签名 #
原理:
数字签名的工作过程通常包括以下步骤:
1. 生成哈希:对消息内容生成一个哈希值(摘要),这个哈希值是消息内容的唯一表示。
2. 加密哈希:使用发送者的私钥对哈希值进行加密,生成数字签名。
3. 发送消息:将 原始消息 和 数字签名 一起发送给接收者。
4. 验证签名:接收者使用发送者的公钥解密数字签名,得到哈希值,并对接收到的消息重新生成哈希值。若两个哈希值匹配,则验证成功,表明消息未被篡改且确实来自发送者。
gpg --sign message.txt #对文件进行签名 生成message.txt.gpg签名文件
gpg --verify message.txt.gpg #验证文件签名
可以发现,在数字签名中,使用私钥进行加密的。这确保有公钥的每个人都能解密。
GPT例子:
Bob 发送一条重要的消息,确保这条消息的真实性和完整性。
场景:Alice 向 Bob 发送一条重要消息
1. 生成密钥对:
- Alice 生成一对密钥:一个公钥和一个私钥。
- 公钥用于加密和验证签名,私钥用于签名。
2. 撰写消息:
- Alice 撰写了一条消息,例如:“我将在明天的会议上提出新的项目计划。”
3. 生成哈希值:
- Alice 使用哈希函数(如 SHA-256)对消息内容生成一个哈希值。假设生成的哈希值为 `abc123`。
4. 对哈希值进行签名:
- Alice 使用自己的私钥对这个哈希值进行加密,生成数字签名。假设生成的数字签名为 `signatureXYZ`。
5. 发送消息和签名:
- Alice 将原始消息和数字签名一起发送给 Bob:
- 消息: “我将在明天的会议上提出新的项目计划。”
- 数字签名: `signatureXYZ`
6. 验证签名:
- Bob 收到消息后,首先使用 Alice 的公钥对数字签名进行解密,得到哈希值 `abc123`。
- 然后,Bob 对收到的消息内容进行哈希运算,得到新的哈希值。
- 如果这两个哈希值相同,Bob 就可以确认:
- 消息确实是由 Alice 发送的(身份验证)。
- 消息在传输过程中没有被篡改(数据完整性)。
分享我的公钥 #
欢迎各位用我的公钥加密信息后base64编码发在评论区。
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEZwUYbRYJKwYBBAHaRw8BAQdAwBLK8dtRQVydYhnryrOLokAw6Dky8Y5ZQsVz
fBTnQrq0IllhbG9pcyAoMSkgPHlhbG9pcy54eUBmb3htYWlsLmNvbT6IkwQTFgoA
OxYhBHiRpfwkIQGQVJ94tpg/l5yHph3XBQJnBRhtAhsDBQsJCAcCAiICBhUKCQgL
AgQWAgMBAh4HAheAAAoJEJg/l5yHph3XPsIBALeC9buypiArm8sqHcn8buzw/GWn
mv+5KFjcDQLQKKl9AP9jmAtnnXIOZSClalxhssKgrezG9I3A//tVzqWp42RICLg4
BGcFGG0SCisGAQQBl1UBBQEBB0CXRSf1JAdKg/U9oFkwzcGPKW0Lrb2hhaIucRcc
vS50NgMBCAeIeAQYFgoAIBYhBHiRpfwkIQGQVJ94tpg/l5yHph3XBQJnBRhtAhsM
AAoJEJg/l5yHph3X52QBAJDkrZ9MOtX5JCdb7Shy76Zs5AdGCJyaoscrRGeA1YmG
AQCCTvoBA4nUX2xffB+wXrfUrEMicSE1Zw6z+AK8li0aBg==
=cuG8
-----END PGP PUBLIC KEY BLOCK-----