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作为文件的唯一标志,它基于文件本身创建,和HTTP不同的是,它不标志文件存储的位置。
一个IPFS节点可以向它的peer询问是否存有某特定hash值的文件,如果某个peer有这个文件,就返回文件。
由4个部分组成
CID当前最新的版本是v1,结构是:
<multibase-prefix><cid-version><multicodec-content-type><multihash-content-address>
- 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算法。
<varint hash function code><varint digest size in bytes><hash function output>
下面是使用4中不同hash算法对同一个文件获得multi-hash,使用的是16进制。
- 紫色的部分表示hash算法,不同算法有对应的标志。
- 绿色部分表示hash值长度,这里都是256位,也就是32 bytes,使用16进制表示为
20
。 - 白色部分表示使用对应的hash算法求得的hash值。
参考
https://docs.ipfs.io/guides/concepts/cid/
https://github.com/multiformats/multihash
网友评论