
IPFS中包含哈希去重,即每个文件会根据内容生成一串对应的数字。在存储时,如果已经存在这一串数字,只要内容不变就不会二次存储。这样的技术能够保证数据的不重复,很大程度上解决了数据的冗余问题。
区块链就像一个对所有人完全公开的分布式账本,区块的重要组成部分就是哈希值。每个区块都包含一些数据,是这个区块的哈希值,以及前一个区块的哈希值。并且区块中保存的数据与区块链的类型有关。例如比特币这种区块链中的区块保存的是交易信息,包括买家,卖家,比特币的数量。
哈希算法并不是指某一种算法,而是某一类算法,就像水果并不是只有苹果,还有香蕉、哈密瓜、葡萄等等。
只要符合这类型算法的特点就属于哈希算法。哈希算法的特点是可以将任意长度的信息转换成一段固定长度的字符串。
简单来说,就是将任意长度的交易信息转换为一个固定长度的字符串;哈希算法是一种只能加密,不能解密的密码学算法。
举例说明:假如你的家庭相薄里存储了很多家人的照片,某日大家坐在一起想找出爷爷80岁寿诞的全家福,因为照片太多导致找寻无从下手,但我们在存储照片时如果提前采用字母编码的方式,这样就能根据编码快速的找到对应的图片。

什么是哈希函数?
哈希函数只是一个数学函数,它接受输入并给出唯一的输出。
在这里输入的内容可以是任何东西,从您的名字到10GB的电影。当您将名称(输入)放入哈希函数(例如SHA-256)时,它将为您提供输出。每次输入您的姓名时,此输出将相同。
但是,如果您更改输入内容,例如在名称中添加空格或大写字母,输出将发生变化。因此,每个唯一的输入都有一个唯一的输出。
下图说明了什么是哈希和哈希函数,以及它们如何工作。

散列函数如何工作?
请注意,从输入(您的名字)确定输出很容易。但是很难(几乎不可能)从输出中获取输入(您的名字)。
将输入转换为输出的函数称为哈希函数,而输出称为哈希。
这是SHA-256哈希函数的示例。在输入字段中输入您的名字,然后查看得到的哈希输出。

SHA256示例
请注意,即使添加空格或使用大写字母,哈希输出也会更改。
还有其他哈希函数,例如SHA-1(由Git使用),SHA-256或BLAKE2。
这些散列函数的不同之处在于它们用来将输入转换为输出的内部数学或算法。由于使用了不同的算法,即使对于相同的输入,这些算法的输出也不同。
您可以在下面查看SHA-1哈希函数,并查看SHA-1对于相同的输入如何返回与SHA-256不同的输出类型。

SHA1示例
请注意,SHA-256散列比SHA-1散列长。这是因为SHA-1创建一个160位(长40个字母)的哈希,而SHA-256创建一个256位(长64个字母)的哈希。
每个好的哈希函数都会生成满足以下重要属性的哈希:
确定性:相同的输入消息始终返回完全相同的输出哈希。因此,如果再次输入名称,将得到相同的输出哈希。
不相关:输入消息中的微小变化将生成完全不同的哈希。
unique :从两个不同的输入消息生成相同的哈希(输出)是不可行的
单向:从其哈希值猜测或计算输入消息是不可行的。这就是为什么在图中有一个绿色箭头(显示容易)和一个红色箭头(显示硬)的原因。
哈希函数是当今全世界网络安全的核心部分。他们保护您的密码,资金和其他机密数据 ……不仅是您的,还包括大银行,医院,政府和所有人的数据。而且哈希可以让网站所有者看不到您的实际密码。
由于哈希函数是单向的,因此即使有人入侵了网站服务器并窃取了存储在服务器上的哈希,他也无法弄清楚实际的密码是什么。
哈希算法是一种能为数据赋予独一无二烙印的算法,是区块链中保证交易信息不被篡改的单向密码机制,它为区块链中的数据办理“身份凭证”,降低系统数据被模仿和造假的可能。
·END·


