# 哈希算法简介

By [rensheng](https://paragraph.com/@whorf) · 2022-08-01

---

[auction://0xabEFBc9fD2F806065b4f3C237d4b59D9A97Bcac7?auctionId=0x4451a5f62d3ccb182fd4cc71d09481025944bf5c4ccc7648309c145775e53991&tokenId=24365](https://etherscan.io/address/0xabEFBc9fD2F806065b4f3C237d4b59D9A97Bcac7)

我们在谈到区块链的时候，经常会听到关于哈希、哈希值、哈希算法这些词。很多人都认为哈希就是区块链上的安全保障，但是严格来说，哈希并不是一种加密算法。因为加密总是相对于解密而言，哈希其实是一种单向密码体制，即它是一个从明文到密文的不可逆的映射，只有加密过程，没有解密过程。在聊哈希算法之前我们先来聊聊什么是哈希。

**什么是哈希/ Hash**

哈希又称作“散列”，是一种数学计算机程序，它接收任何一组任意长度的输入信息，通过哈希算法变换成固定长度的数据指纹输出形式，如字母和数字的组合，该输出就是“哈希值”。

总体而言，哈希算法可理解为一种消息摘要算法，将消息或数据压缩变小并拥有固定格式。由于其单向运算具有一定的不可逆性，哈希算法已成为加密算法中一个构成部分，但完整的加密机制不能仅依赖哈希算法。

关于不可逆，简单理解就像1+4=5和2+3=5一样，即便你知道结果是5，仍得不出输入的是什么数字。

**常见哈希算法**

目前常见的 Hash 算法包括国际上的 Message Digest（ MD） 系列和 Secure Hash Algorithm（ SHA） 系列算法，以及国内的 SM3 算法。

其中，SHA 256 是 SHA 系列算法之一，由美国国安局设计、美国国家标准与技术研究院发布的一套哈希算法，由于其摘要长度为 256bits，故称 SHA 256。SHA 256也是保护数字信息的最安全的方法之一。

例如计算

“hello blockchain world, this is yeasy@github”的SHA-256 Hash值，

得到的结果将是

“db8305d71a9f2f90a3e118a9b49a4c381d2b80cf7bcef81930f30ab1832a3c90”。

对于某个文件，无需查看原始内容，只要其 SHA-256 Hash 计算后结果相同，则说明该文件内容极大概率就是一样的。

**哈希算法的作用又是什么呢？**

看似深奥的数学函数，哈希算法其实跟我们的生活息息相关。

比如早期，我们在传输信息时，由于信道不安全可能会出现信息错乱，那么接收方如何有效判断信息的一致性，来回多次传送确认是效率极低的一种方式。如果利用哈希算法则可很好地解决这一难题。当A在发出信息时，可对原文进行哈希运算，并将运算出来的哈希值附在文本之后用来校验。这样B在收到信息后，可对原文同样进行哈希运算，通过对比哈希值来判断传送和接收信息的一致性。

哈希算法也是区块链中用的最多的一种算法，它被广泛的使用在构建区块和确认交易的完整性上。例如在比特币中，使用哈希算法把交易生成数据摘要，当前区块里面包含上一个区块的哈希值，后面一个区块又包含当前区块的哈希值，就这样一个接一个的连接起来，形成一个不可逆向篡改的链表。

**哈希算法的特征**

除了快速对比内容外， Hash思想也经常被应用到基于内容的编址或命名算法中。一个优秀的 Hash 算法， 将能满足：

**正向快速**：给定原文和 Hash 算法，在有限时间和有限资源内能计算得到 Hash 值；

**逆向困难**：给定Hash 值，在有限时间内无法（基本不可能）逆推出原文，这也是哈希安全性的基础；

**输入敏感**：原始输入信息发生任何改变，新产生的 Hash 值都应该发生很大变化；

**避免碰撞**：很难找到两段内容不同的明文，使得它们的 Hash 值一致（即发生碰撞）。

可以看出，哈希算法因能快速验证、并防止数据或交易在传递过程中被篡改，在网络数据和区块链技术应用中有着重大作用，也是理解区块链为何具备安全可信特征的重要因素。

---

*Originally published on [rensheng](https://paragraph.com/@whorf/gxh87VjppWAQcNjxjaEI)*
