加密与区块链原理完整讲解(通俗版)

我前几天写了一篇关于如何对作品进行数字签名保护的文章,介绍了实际操作的步骤。
但有一些朋友反馈说,他们想更系统地了解一下加密的基本原理。所以今天我就想用一种最通俗的方式,也就是文科生也能听懂的方式,来介绍一下这方面的内容。


🔐
从加密到区块链:用最通俗的方式讲清楚密码学的核心原理

一、加密:让信息变得“看不懂”

加密的意思就是——让别人看不懂信息。比如你给朋友发一条消息:“明天见”,如果这条消息被别人截获了,那隐私就没了。

加密的做法,就是先把“明天见”这三个字经过一段计算,变成一串完全看不懂的符号,比如:

7d#8xAq!91@uT

别人就算拿到这串符号,也看不出原文是什么。而你的朋友知道解密的“方法”或“密钥”,就能把它还原回去。

加密的核心要点是:
同样的原文,如果密钥不同,结果也完全不同。
没有密钥,几乎不可能恢复出原文。


二、对称加密:同一把钥匙,加密也解密

对称加密其实很好理解。比如两台电脑要传文件,它们都提前约好一个密钥,比如:

密钥 = "mysecret"

当电脑A要传文件给电脑B时,它就用这个密钥加密文件。电脑B收到后,用同一个密钥解密,就能拿到原文。

你可以想象成两台机器都装了相同的“加密软件”,只有知道这组“密码”的机器才能正常交流。

常见的算法有:
AES(Advanced Encryption
Standard)
:现代最常用的对称算法,安全且高效。
DES:早期算法,已被淘汰。

它的主要问题在于:
> 如果两台机器在远距离通信,如何把密钥安全地告诉对方?
这就像你要告诉朋友家门密码,却怕被别人中途偷听到一样。


三、非对称加密:两把钥匙,一锁一开

为了解决“密钥传输”问题,出现了非对称加密。它设计了两把互相关联的钥匙
– 一把叫 公钥(public key)
– 一把叫 私钥(private key)

它们之间有这样的关系:
– 用公钥加密的内容,只能用对应的私钥解开;
– 用私钥加密的内容,只能用对应的公钥解开。

换句话说:
– 公钥负责“上锁”;
– 私钥负责“开锁”;
但你不能从锁推导出钥匙。

工作流程举例:
1. 你生成一对钥匙:公钥和私钥。
2. 你把公钥发给别人,让所有人都能用。
3. 别人给你发信息时,用你的公钥加密。
4. 只有你(持有私钥的人)才能解密。

这样一来,就不怕中途有人窃听了。哪怕别人拿到了公钥,也无法解密任何内容。

常见算法有:
RSA:基于大数分解难题。

ECC(椭圆曲线加密):更高效、密钥更短,现代系统多采用这种。


四、数字签名:证明信息没被改过,也真的是你发的

数字签名的目的不是“加密内容”,而是“确认身份和完整性”。

想象你发出一份电子文件,比如合同或公证书,你希望别人知道:
– 这份文件确实是我签的;
– 传输过程中没人改过。

数字签名的具体工作步骤是:

  1. 生成哈希值首先,计算这份文件的哈希值(可以理解为它的“数字指纹”)。
    • 哈希函数会把文件的全部内容压缩成一个固定长度的字符串,例如 64
      个字符。
    • 哪怕文件只改动一个标点符号,哈希值也会完全不同。
  2. 用私钥加密这个哈希值这个加密后的结果就是“签名”。
    • 注意:签名不是对整份文件加密,而只是对哈希值加密,这样效率高。
  3. 别人验证签名时用你的公钥解开签名,拿到哈希值;
    • 再自己对收到的文件重新计算哈希;
    • 两者对比——一样就说明文件没被改,且确实是你签的。

数字签名 = 私钥签发 + 公钥验证 + 哈希校验


五、哈希函数:把内容压缩成唯一的“数字指纹”

哈希函数是一种单向运算。
输入任何数据,它都会输出一个固定长度的数字串。

例如(使用 SHA-256 算法):

输入:Hello
输出:185F8DB32271FE25F561A6FC938B2E264306EC304EDA518007D1764826381969

特性:
1. 不可逆:从结果无法反推出输入的内容。
2. 高敏感性:输入哪怕改一个字,结果完全不同。
3. 定长输出:无论输入多大,输出长度都一样。
4.
唯一性强:几乎不可能出现两个不同输入生成同一个结果。

这意味着:哈希值就像文件的“唯一身份证号”。系统可以通过比对哈希,判断文件是否被篡改。


六、区块链:哈希链起到“防篡改”的作用

区块链本质上是一个按时间顺序排列的记录链,每个“区块”都保存了三样关键信息:
1. 当前区块的数据(例如交易记录)
2. 上一个区块的哈希值
3. 自己的哈希值

每个区块的哈希值都取决于前一个区块。
如果有人试图修改第 5 个区块的内容,第 5 个区块的哈希就会改变,于是第 6
个区块中保存的“上一个哈希”就对不上了,整个链条立刻就断开。

因此区块链具有天然的防篡改特性。这是一种“数学式的信任”:不依赖任何中央机构,而由计算规则本身保证。


七、附录:比特币挖矿的工作原理(这一部分文科生可以略过)

一、为什么要“挖矿”

在比特币系统里,每10分钟会生成一个新区块。但必须由某个节点(矿工)来“提出”这个区块。

系统要求:
>
谁先算出一个符合条件的哈希值,谁就有权写入区块链,并获得奖励。这就像一场数学比赛:所有矿工都在同时计算,看谁先算出正确答案。


二、哈希的难题:找到“符合条件的哈希值”

系统规定新区块的哈希结果必须满足一个特定条件,比如:

哈希结果前面必须有4个连续的0

例如:

0000AF93BC19D2...

这样的结果才被认为是“有效区块”。

哈希算法是不可预测的,唯一的办法是不断尝试。


三、矿工的尝试过程

每个矿工会把区块中的所有数据(包括交易记录、上一个区块的哈希等)固定下来,然后加入一个随机数(Nonce)。

这个随机数从0开始,每加1就重新计算一次哈希。

尝试次数 Nonce 值 计算结果哈希 是否符合
1 0 A83F2D9C…
2 1 FEE1AB77…
3 2 0000AF93…

当某个矿工算出一个哈希结果满足规则,比如前4个字符全是0,就成功“挖出”新区块。


四、计算下一个有效哈希值的算法逻辑

目标难度 = "0000"nonce = 0while True:    text = 上一区块哈希 + 当前区块数据 + str(nonce)    hash_value = SHA256(text)    if hash_value.startswith(目标难度):        print("找到有效哈希:", hash_value)        break    nonce += 1

五、为什么安全

因为:
– 改一个区块就要重新计算所有后续区块的哈希;
– 区块越多,重新计算越难;
– 计算量巨大,使篡改几乎不可能。


六、难度调整机制

系统每2016个区块会自动调整难度:
– 如果出块太快,就提高要求(例如要求5个0);
– 如果太慢,就降低要求。
保证平均10分钟出块。


七、总结

元素 功能 原理
哈希函数 保证唯一性、防篡改 内容→哈希值
Nonce 随机参数 改变输入、控制结果
工作量证明 竞争出块权 找到符合条件的哈希
链接哈希 形成区块链结构 每块依赖上块
难度调整 保持节奏 自动调节

加密是保密,签名是认证,哈希是指纹,区块链是由指纹串起的账本,挖矿就是在这本账上寻找符合规则的下一页。

联系信息(Contact)

本文作者:Geoffrey Chen

邮箱:[email protected]

公钥验证(Verified GPG Public Key)
🔗 keys.openpgp.org
(可通过邮箱搜索获取)


Discover more from Geoffrey Chen

Subscribe to get the latest posts sent to your email.

Leave a Reply