IPFS学习-哈希

Hashes

哈希函数是接受一些任意输入并返回固定长度值的函数。具体值取决于所使用的给定哈希算法,例如SHA-1(GIT在使用),SHA-256,或者是BLAKE2,但是给予一个输入使用哈希算法总是返回相同的输出。
例如:输入以下:

Hello world

使用SHA-1则会输出:

0x7B502C3A1F48C8609AE212CDFB639DEE39673F5E

然而相同的输入使用SHA-256将会输出以下:

0x64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C

第二个哈希值长度要大于第一个,这是因为SHA-1创建一个160比特的哈希值,而SHA-256创建一个256比特的哈希值。同样,前置的0x只是一个指示符,告诉我们以下的哈希表示为基数16(或十六进制)的数字。
哈希可以用不同的基数表示(base2base16base32等)。 实际上,IPFS将此作为其内容标识符的一部分,并使用Multibase协议同时支持多种基本表示形式。
例如,”Hello World"的SHA-256哈希值使用base32表示为:

mtwirsqawjuoloq2gvtyug2tc3jbf5htm2zeo4rsknfiv3fdp46a

加密散列的特征

加密散列带有非常重要的特性:

  • 确定性-相同的输入消息总是返回相同的输出哈希。
  • 不相关-消息中的微小变化应生成完全不同的哈希。
  • 唯一性-从两条不同的消息生成相同的哈希是不可行的。
  • 单向性-从其哈希值猜测或计算输入消息是不可行的。

事实证明,这些功能还意味着我们可以使用加密哈希来识别任何数据:哈希对于我们从中计算出的数据是唯一的,并且它不会太长(哈希是固定长度的,因此SHA-256哈希是 1 GB的视频文件的大小仍然只有32个字节),因此通过网络发送它不会占用很多资源。

这对于像IPFS这样的分布式系统至关重要,在该系统中,我们希望能够从许多地方存储和检索数据。 运行IPFS的计算机可以询问与之连接的所有对等方,是否有一个带有特定哈希值的文件,如果其中一个具有特定的哈希值,则他们将整个文件发回。 没有短而独特的标识符(例如密码哈希),就不可能实现。 这项技术称为“内容寻址”-因为内容本身是用来形成地址的,而不是用于存储其所在计算机和磁盘位置的信息。

posted @ 2019-12-18 14:43  触不可及`  阅读(890)  评论(1编辑  收藏  举报