由一个hash字符串生成多个子hash字符串

通过存储一个head hash,然后把子hash放到网络中
当然,也可以像默克尔树那样的,生成多级的子hash ,可以通过规则配置不同的hash 生成方式。倒置的默克尔树

  1. 我有一个文件,然后我把她分隔成了5分
  2. 我先得到文件的hash值,然后把文件切割成5片,同时匹配每一个子hash值,当然,子hash也可以通过私钥加密一次
  3. 这样,我只需要保留一个根就好了,查找的时候,通过p2p网络的查找方式查找就可以了
  4. 如果我们需要更多的功能的话,那么,就需要对hash进行配置,比如数据块的长度,数据块的是否又进行了分片

import sha3

def gen_muti_hash(h_str, count):
    h_l = int(len(h_str) / count)

    for i in range(1, count):
        h_str1 = str(i) + h_str[0:h_l]

        k = sha3.keccak_256()
        k.update(h_str1.encode("utf-8"))
        yield k.hexdigest()

        h_str = h_str[h_l:]

    k = sha3.keccak_256()
    h_str = str(count) + h_str
    k.update(h_str.encode("utf-8"))
    yield k.hexdigest()


if __name__ == '__main__':
    a = "hello world 素数"
    k = sha3.keccak_256()
    k.update(a.encode("utf-8"))

    print(list(gen_muti_hash(k.hexdigest(), 2)), "\n")
    print(list(gen_muti_hash(k.hexdigest(), 3)), "\n")
    print(list(gen_muti_hash(k.hexdigest(), 4)), "\n")
    print(list(gen_muti_hash(k.hexdigest(), 5)), "\n")
posted @ 2018-01-16 15:09  白云辉  阅读(404)  评论(0编辑  收藏  举报