# 区块链为啥用哈希函数？传统加密弊端？小白！逗图【18-08-07】

By [SanTi Li](https://paragraph.com/@santi-li) · 2021-11-26

---

![](https://storage.googleapis.com/papyrus_images/b9c33d338fe99605432338dbc90ee20d012643ed317c24a7eaf81bcab619b56b.png)

**区块链的世界总会听到一个词，哈希Hash，也称哈希函数。一天到晚哈希来，哈希去的，把人都听迷糊了。那么为什么要用哈希函数呢？这篇文章就给大家通俗易懂的讲一讲。**

**LET'S GO!!!**

\*\* \*\*

**首先，加密，我们来讲最纯洁两小无猜的信息传递：如下图完美展示嘿嘿：**

![](https://storage.googleapis.com/papyrus_images/6394d1c82f0225544050f4ce180642ef11f7b5d48de25d7f153b2db767bebee0.png)

A传递信息123给B，B直接接收到的就是123。\*\*但这就像我们在象牙塔里面憧憬未来社会一样单纯可爱。\*\*因为一旦一个人发现了这个数据直接就偷走了，有可能给造成极大的损失，比如保险柜密码。

![](https://storage.googleapis.com/papyrus_images/ed6e97646a1d3b5a4a289ad164d6ecfd69d83f11bce1f8446d112ed55339c542.png)

**然后，就出现了一种想法，没有安全感啊，加个密吧，吼吼吼。**

![](https://storage.googleapis.com/papyrus_images/73138e80a0e81ed3b95a085c173cfa9bc4ce48345ea613091df362e8aa2a35a5.png)

**就是经常在网上看到的下图：(传统对称加密)**

![](https://storage.googleapis.com/papyrus_images/c11e10019ae4cb341963ca318b40b0d8c1ceb787a28550fd1317bbdbae1309b4.png)

     当然例子里面的+1算法是最简单的秘钥，实际生活中将会更加的复杂，所以这种加密的方法在某些程度上已经能够满足生活中某些地方的需要。

![](https://storage.googleapis.com/papyrus_images/80a762dca9f64229c5c4fb2e8ad63f2e373faeb0e337eace2f988862c4951af8.png)

\*\* \*\*

**都能满足了，那为啥还要继续学！！！！**

\*\*因为，他/她/它~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \*\*

![](https://storage.googleapis.com/papyrus_images/93ec68106df9a6a176c4129916d642b7b56709fbdd6b48b36ab9394d765bf5f9.png)

**黑客一旦盗取破解了你的秘钥，那么就可以代替你做很多事，当然你最好别指望他大发慈悲给你存个200元红包。**

那么会有人说了，黑客破解秘钥容易吗？答案是：不容易，但概率也不低。

但是，只要这个监听者尝试次数够多，通过你的密文相关信息不断总结，运算速度够快，就很有可能碰撞出我们的秘钥从而得到关键他需要的信息来盗用。

**因为上述传统对称加密的方法，秘钥被算破解后，就可以为所欲为了。**

**区块链中，我们经常用的是，非对称加密的方法。**

**那用傻白甜的图理解咋理解呢：**

**前半部可以按之前的非对称加密的方法理解就好了哦**

![](https://storage.googleapis.com/papyrus_images/875f6f57c548671ea598eec8e48c1cf8044419b8f8aa251dfea6f1c82d2b06ae.png)

区别在于后半部，密文是通过B的私有秘钥打开的，所以这种算法就避免了传统加密模式中的秘钥被黑客推算出来后就完蛋了的尴尬。

**（算法会有所不同，但是非对称加密e和d的规律永远是我们画的这样）**

但黑客也有可能通过黑你保存私钥的地方来偷，但是难度系数要大一点，**所以区块链的伙伴别傻了吧唧把私钥发给任何人**，或者任何论坛，等公开场合上面，公钥随便发哈哈哈，看看能不能收到糖果。私钥可以保存在额外加密的onenote，或其他地方即可。

**以上信息呢，是加密的基础知识方面，接下来，我们来介绍哈希函数这个数字签名中常用的东东。不要被它神奇的名字弄蒙圈了。**

**我们来讲一个故事，这个故事你会觉得很惊讶，但他就是事实。啥故事呢？**

**生日碰撞现象：**

**假如一个班50个同学，有2个同学同一天生日的概率有多少？我们一定会想，一年365天，我们班一共50个人，那概率不大啊。**

表面看来的确是这样的，但实际的概率呢？往往真实并不跟我们想的一样。

**假设，一共有N个人，两个人生日不在同一天的概率是P, SO，那么两个人在同一天的概率就是1-P，**

当N=1时，就不存在第二个人了，那肯定P=100%了

当N=2和3时，

![](https://storage.googleapis.com/papyrus_images/7bd5a47420a74141f17a4cafee9fbecaf83cd144801f89ea239578283d77ac34.png)

以此类推，当N=n时的P就是:

![](https://storage.googleapis.com/papyrus_images/2f23486afb04789c2af8a5fc478512a7f43120c2386b44eb5f3a8adea4c1b21a.png)

所以，我们来看看，我们最开始觉得概率很小的那个50人中俩人一天出生概率到底有多少呢，将N=50代入公式中得到：

**P=2.9%，所以1-P=97.1% ！！！**

也就是说，50人里面生日同一天的概率居然有97.1%，万万没想到啊。当我第一次看到这个数的时候也觉得很不可思议，但是的确这是没有问题的算法。

![](https://storage.googleapis.com/papyrus_images/ac33b6bafba0d9a877895eea1cdcbfb64d7504712bbff9f3642fb7bcda9a7cc9.png)

当然接下来说的哈希函数，也会被生日碰撞现象撞出来，，所以生日碰撞现象是一个威胁。

**那你还说他干嘛!!!**

\*\* 利大于弊嘛！！！\*\*

**主要是，利用哈希函数的特点：**

**1.单向性**

**2.每个函数推导出的结果位数确定**

比如如下图：A给B通过哈希函数传输数据，B得到RNG

![](https://storage.googleapis.com/papyrus_images/ed5b3a8ce5b07a070927d9b31177cf95d6d1a0c1614edf16f76298381a583d2a.png)

**利用哈希函数的单单向性，我们就能避免传统加密被黑客破解秘钥后的尴尬。**

**传统情况一旦你的秘钥被黑客知道了，接收者也不知道数据的真假。**

![](https://storage.googleapis.com/papyrus_images/482b69d38aa6b70302e67741c0c3a8f6695941813b569eef32dcfd4e7100f6be.png)

所以你很有可能接收到的就是错误的黑客发出的222数据，因为你只能解密，你也不知道哪个是正确的数据。

而有了哈希函数算法后，我们就可以利用它的单向性。避免这个问题

![](https://storage.googleapis.com/papyrus_images/07c314338a0d4f530e6c0a757396f0cbf35d949ea897d1279f5409c99ebdc22e.png)

我们收到了123这个数据，也收到了RNG这个转换后的数据，通过哈希函数推算，123的确能推算出RNG，那证明这个数据就是真实的。而且黑客就算拿到了计算后的哈希值RNG，也反推不回去123这个数据。

RNG这段也就是我们常常说的**数字签名**的意思。上半段还是我们讲的加密。

所以结局要来了哈哈哈，区块链中的哈希

![](https://storage.googleapis.com/papyrus_images/4b1e18b187c81cd752f3e4feb6ce5d6a753bb7ac51a94dfcbdf45a3fccc5cba5.png)

区块链中，每个区块不仅仅告诉你之前区块的位置，也给你提供一个哈希值去验证这个区块所包含的数据是否发生篡改。

**睁大你的双眼，哈哈这块有一丢丢绕哦：**

![](https://storage.googleapis.com/papyrus_images/e07bc2b77ce2404dff6eb94bbd7c27408a55133fbfba5c2ccca48bd23a97dcd0.png)

**也就是，**

**第一、单向性保证了通过哈希值RNG你没法反推出我的原数据123,当然真正的时候哈希值乱七八糟的，不可能是RNG这么简单的，哈哈哈。**

**第二、每个区块保存了前面区块的哈希值，也就是Block2有Hash值，H1，所以Block2如果被坑了，那么Block2算出来了H2，和H1就不一样了哦。所以就会检查出问题节点。**

在区块链中，刚刚描述的生日碰撞现象是与哈希函数相关的重要概念，**体现着哈希函数的安全性**，指两个不同的消息在同一个哈希函数作用下，具有相同的哈希值。

所以这是一个需要不断更新算法来增加抗碰撞性。

这就是区块链中我们经常听到的哈希哈希的原理，系不系明白了呢，感谢伟大的工程师们。具体的hash函数算法，我就不深究了，那个太复杂了，烧脑哈哈。咱们了解一下基础层面的就够啦哦~~~

[https://mp.weixin.qq.com/s/GfuZy7M99hT3S0UH6Rdjxg](https://mp.weixin.qq.com/s/GfuZy7M99hT3S0UH6Rdjxg)

---

*Originally published on [SanTi Li](https://paragraph.com/@santi-li/18-08-07)*
