IPFS的content identifier(CID)

A content identifier, or CID, is a label used to point to material in IPFS. It doesn’t indicate where the content is stored, but it forms a kind of address based on the content itself.

IPFS协议使用CID作为文件的唯一标志,它根据内容进行hash计算得到,标志的是文件内容;而HTTP标志的则是文件存储的位置。
一个IPFS节点可以向它的peer询问是否存有某特定hash值的文件,如果某个peer有这个文件,就返回文件。

由4个部分组成

CID当前最新的版本是v1,结构是:

  • multi-base:编码格式
  • CID version
  • multi-codec:文件类型
  • multi-hash:hash值

举个例子,将下面的CID转换成可读形式,它表示使用base58btc编码,cidv1版本的CID,文件类型raw,hash算法sha2-256,hash值长度256 bits, hash值6e6ff7950a36187a801613426e858dce686cd7d7e3c0fc42ee0330072d245c95

# example CID
zb2rhe5P4gXftAwvA4eXQ5HJwsER2owDyS9sKaQRRVQPn93bA
# corresponding human readable CID
base58btc - cidv1 - raw - sha2-256-256-6e6ff7950a36187a801613426e858dce686cd7d7e3c0fc42ee0330072d245c95

支持多版本

这里的multi指的是它支持多个版本

  • multi-base的作用是缩小hash的长度,支持base64, base32, base58btc等等。完整的支持列表
  • multi-codec标志数据的类型,支持raw, png, mp4, zip, eth-tx, bitcoin-tx, git-raw, md5, sha2-512等等。可以看到它不仅支持图片、视频,还支持以太坊、比特币的交易和区块。完整的支持列表
  • multi-hash支持多种hash方法,md5, sha2-512, sha3-512等等

multi-hash

multi-hash又分成3部分:hash算法、hash值bytes长度、hash值。不仅包含了hash值,还包含了所使用的hash算法,实现self describing,并兼容多种hash算法。

下面是使用4种不同hash算法对同一个文件获得multi-hash,使用的是16进制。

multi-hash

  • 紫色的部分表示hash算法,不同算法有对应的标志。
  • 绿色部分表示hash值长度,这里都是256位,也就是32 bytes,使用16进制表示为20
  • 白色部分表示使用对应的hash算法求得的hash值。

参考

https://docs.ipfs.io/guides/concepts/cid/
https://github.com/multiformats/multihash

你可能感兴趣的:(IPFS的content identifier(CID))