ipfs,hdfs和ipfs
文章目录IPFS如何计算文件哈希?IPFS-多哈希易用性要求:Base58
IPFS如何计算文件哈希?
IPFS采用SHA2-256算法,安全级别高。对于任意长度的内容,生成的哈希值具有32字节的固定长度。
在Linux下,SHA2-256格式的哈希值可以直接用sha256sum计算:
[root @ VM _ 0 _ 14 _ centos xxd tk]# sha 256 sum ipfs file . txt e 150 a1 EC 81 E8 e 93 E1 ea 2e 3c 3 a 77 e 66 EC 6 db D6 a3 b 460 f 89 C1 d 08 aecf 422 ee 401 a 0 ipfs file . txt[root @ VM _ 0 _ 14 _ centos xxd tk]#。/ipfs add ipfs file . txt added qmqu 2g S4 gz 7 tpitecjduxdqfd 9 bbbewxdxppfhlfyhvuei ipfs file . txt 7 B/?[ - .
但是在IPFS中,并不能利用上面得到的SHA2-256结果,去确定文件地址,因为IPFS还有一些额外的因素需要考虑。
我们将ipfsfile.txt添加到IPFS。除了正文中的123456个字符,IPFS还将添加一些元数据。
使用下面的命令,我们可以确切地看到IPFSF中存储了什么:
[root@VM_0_14_centos xxdtk]#。/ipfs对象get qmqu 2 GS 4 gz 7 tpitecjdudxdqfd 9 bbbewxdxppfhlfyhvuei { Links :[], Data : \ u 0008 \ u 0002 \ u 0012 \ u 0007123456 \ n \ u 0018 \ u 0007 }[root @ VM _ 0 _ 14 _ cento sxx dtk]#返回的是JSON格式的字符串,数据显示具体内容。可以看到,除了文件原来的内容之外,还添加了一些其他数据。** IPFS将文件数据保存为unixfs格式,可以认为是IPFS核心数据结构MerkleDAG的一种表达。**
我们可以通过获取IPFS的原始格式数据来计算正确的哈希值。IPFS保存的内容将被分成许多块。因为本例中的文件相对较小,所以可以保存一个块。
因此,我们可以使用以下命令直接获取IPFS块的内容:
[root@VM_0_14_centos xxdtk]#。/ipfs block get qmqu 2 GS 4 gz 7 tpitecjdudxdqfd 9 bbbewxdxppfhlfyhvuei sha 56 sum 1 F9 b 484934 c 481946 f 11 af 0d 87 F8 c 04603 fa 8 BFA 6b 8589185 EDF 506 C1 E1 CB 09 b-[root @ VM _ 0 _ 14 _ cento sxx DTK]#该块的哈希值表示为:1 F9 b 484934 c 48199
我们可以用这个哈希值得到我们平时看到的IPFS文件的哈希值吗?好像不是这样,因为我们看到的文件的哈希值都是以Qm开头的,这里明显不匹配。这就涉及到另一个话题:——动态选择哈希算法的设计。
官员:https://github.com/multiformats/multihash
虽然现在SHA2-256相对安全,但是随着科技的发展,也许有一天会宣布可以破解。自然需要更高级的算法。但是,IPFS协议已经达成,不能随便改变。我该怎么办?虽然现在用的是SHA2-256,但是我可以宣称我支持各种哈希算法。我可以升级算法,但不会有大的架构变化。
所以,IPFS采用了multihash这种简单的HASH表示方式,支持多种HASH算法。如果未来修改算法,用的仍然是multihash,保证了表达方式的持续性。
Multihash是一种自识别哈希(self-identifying hash)。
multihash multihash遵循TLV模式(类型-长度-值)。实际上是一个字符串,由哈希算法代码、哈希值长度(字节数)和哈希值三部分组成。
SHA2-256的代码为0x12,其哈希摘要长度为32字节(十六进制数为0x20)。将1220添加到前面获得的哈希值的开头,我们得到这个示例文件的多哈希编码(十六进制):
12201 f9b 484934 c 481946 f 11 af 0d 87 F8 c 04603 fa 8 BFA 6b 8589185 EDF 506 C1 E1 CB 09 b
官方sha-256格式演示:
总结:我们给IPFS添加ipfsfile.txt。除了正文中的xxx字符,IPFS还会添加一些元数据。然后将sha256sum应用于这个添加了元数据的文件,然后应用multihash规则(前面加1120)和文件的multihash编码(十六机制)。
易用性要求:Base58【推荐】官网:https://github.com/keis/base58
但是这个哈希值显然不是我们看到的。这是怎么回事?太长了,一堆数字不好读,需要重新编码,压缩长度,方便传播。因此,IPFS采用Base58编码。
Base58首先被比特币采用,现在它在区块链项目中非常受欢迎。它常用来表示钱包地址。做过开发的朋友可能对Base64这个代码比较了解,它可以将任何二进制内容转换成便于软件查看的可读字符。
但是Base64也有一些缺点,就是有些字符不协调,比如O和0容易混淆,还有/等符号。人们很容易把一个完整的字符串想成两个不同的字符串,对阅读形成障碍。有时候我们点击鼠标会自动选择整个字符串,但是由于这些符号的干扰,选择操作并没有那么高效。因此,Base58这个代码就诞生了。
设计Base58的主要目的是:
避免混淆。在某些字体中,数字0和字母大写O,以及字母大写I和字母小写L会非常相似。不使用和/的原因是,不是字母或数字的字符串很难被接受为帐号。没有标点符号,一般也不会从中间分开。大多数软件支持双击选择整个字符串。Base58的代码非常简单。查看https://github.com/keis/base58,官方网站
安装python模块base58进行验证
pip安装基础58
Linux 2上的[root @ VM _ 0 _ 14 _ centos ~]# python python 2 . 7 . 5(默认,2019年8月7日00:51:29)[GCC 4 . 8 . 5 2015 06 23(Red Hat 4 . 8 . 5-39)]键入 help 、 copyright 、 credits 或 license 了解更多信息。import base 58 base 58 . b 58 encode _ int(int( 12201 F9 b 484934 c 481946 f 11 af 0d 87 F8 c 04603 fa 8 BFA 6b 8589185 EDF 506 C1 E1 CB 09b ,16)) qmqu 2 GS 4 gz 7 tpitecjduxqfd 9 bbbewxdxppfhlfyhvuei 是基于multihash代码(12201 F9 b 48499
qu 2g S4 gz 7 tpitecjduxdqfd 9 bbbewxdxppfhlfyhvuei只是我们之前用ipfs add命令得到的哈希值!
注意:当前IPFS的multihash值都以1220开始。按照Base58的算法,计算结果都是从Qm开始。
总结:我们给IPFS添加ipfsfile.txt。除了正文中的xxx字符,IPFS还将添加一些元数据以形成IPFS文件。然后将sha256sum应用于这个添加了元数据的文件,然后应用multihash规则(前面加1120)和文件的multihash编码(十六机制)。由于这种糟糕的内存识别,它使用base58为我们的multihash生成最终IPFS文件的哈希值。
可以概括为:在原始数据中加入元数据封装成IPFS文件——计算SHA2-256——封装成multi hash——转换成Base58。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。