LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 币圈百科 > IPFS如何将一幅图片变成一个哈希值?

IPFS如何将一幅图片变成一个哈希值?

2020-03-22 Filecoin社区 来源:火星财经

我之前给大家介绍过IPFS的工作原理,但其中仍然有一些细节并不是太清晰。今天我给大家更详细来介绍IPFS工作的完整流程。

我们从一幅图片开始,现在要把下面这幅图片上传到IPFS中。

我们假设用户已经在自己的电脑上安装了IPFS系统。上传成功后,整个过程可以表示为下面四个流程:

最终,我们会得到这个图片的哈希值:

QmQgQUbBeMTnH1j3QWwNw9LkXjpWDJrjyGYfZpnPp8x5Lu

在这个过程中,中间的两个流程Raw和Digest是做什么的呢?

当我们上传这幅图片时,它首先被转换成了Raw数据,也就是计算机能够读懂的原始数据,接着为了让这个原始数据能够用它的内容作为搜索标签,系统必须有一种办法能把这个原始数据变成一个唯一的标识符,这时系统用到了哈希函数。

哈希函数会将任何输入都转换成一个唯一的输出。如果输入数据中有任何一点变化则输出也会不同。

在这个例子中,Raw数据就是系统哈希函数的输入。如果输入的图片哪怕有任何一个像素发生了变化,则Raw数据就会发生变化,系统哈希函数的输出也会发生变化。

因此当我们发现哈希函数的输出值发生变化时,我们就知道哈希函数的输入发生了变化。这个特性可以被利用来判断原始数据是否被篡改过。

将Raw数据输入到IPFS系统的哈希函数得到的就是Digest数据。在IPFS里使用的哈希函数是一种被称为SHA256的哈希函数。

当系统得到了Digest数据后,会将这个数据转换为一个内容标识符(Content Identifier亦即CID)。这个CID就是用户用来在IPFS系统中搜索文件或数据所用的凭证。在这个例子中就是用户用来下载这幅图片所用的凭证。

IPFS系统将Digest数据转换为CID会用到被称为Multihash的函数。

那什么是Multihash呢?我们考虑下面这个情形:

如果未来的某一天,系统用来将Raw数据转换为Digest数据所用的SHA256哈希函数被破解了,意味着有人可以伪造一幅图片但给我们同样的CID。

这时IPFS系统肯定就不能再用SHA256这个哈希函数了,必须使用安全性更好的哈希函数比如SHA3。这时系统的整个流程就都要修改,以前产生的CID也不再有效。

可是在IPFS系统中,有海量的数据都是用原来那个流程处理的,这意味着所有这些数据都有被篡改的风险,这怎么办?

为了解决这个问题,IPFS就用了Multihash函数。Multihash让系统能够自己定义哈希函数,也就是说对一个输入数据,可以产生多个CID。

在这个例子中就是对这幅图片,我们可以产生多个CID。这个过程如下图所示:

从这个过程我们可以看到,实际上这个图片是被切分成了多个碎片,每一个碎片都转换成了一个Raw数据,一个Digest数据一个CID,然后所有这些碎片的CID最后被集成为一个IPLD即基于默克尔树的DAG对象。

那么这个图片是怎么被切分的呢?只要它的文件所占空间大于256Kb,它就会被切分成小块,每一块小于或等于256Kb。

我们可以用下面这条命令看这幅图片被切分的碎片:

ipfs object get Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u

运行这条命令后,我们会看到这个图片被切成了15块,每一块都小于256Kb,每一小块都被转换成一个CID。

IPFS用IPLD(即DAG技术)管理所有这些小块碎片,将他们组合成一个Base CID。

以上就是IPFS工作的完整流程。

我是IPFS/Filecoin社区发起人晓熙(加入社区,联系v号: liandaoxixi),IPFS/Filecoin是全球共识最大的去中心化存储项目,我会定期在社区分享专业的资讯,为IPFS/Filecoin爱好者建设一个共赢的学习社区。

本文来源:Filecoin社区
原文标题:IPFS如何将一幅图片变成一个哈希值?

—-

编译者/作者:Filecoin社区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...