反向树木建设(奇数个孩子)

我刚刚发现了有关AWS Glacier服务,并希望编写一个小型Python应用程序来通过REST API上传文件。 我查看了所需的标题,并偶然发现了x-amz-sha256-tree-hash 。 我需要计算整个文件的SHA-256散列以及每个1 MB块的所有散列的父散列。 这导致以下树:

AWS的SHA-256树哈希程序

(图片来自这里)

我已经创建了一个读取1 MB大块的函数和一个可以即时计算哈希值的类,然后我完全拼命:

在我的应用程序中,我创建了一个名为chunk的类,它接受数据并在__init__方法中计算哈希,并保存父类和子类(如普通树)。 当用户打开一个文件时,这些块实例将会以其各自的散列(在这个例子中将是7个块实例)正确生成。

现在我有两个相互关联的大问题:

  • 我如何建立这个树倒过来? 我基本上需要为最底层的每个两个块实例创建一个新块,并根据这两个哈希计算一个哈希。 但我在哪里存储该父项? 在父母的孩子和做反向树行走?
  • 这与奇数的孩子有什么关系? 如果我有一个贯穿每个父层的算法,那么我会错过最后一个(0.5 MB)块。
  • 我在SO上查看了这个主题,但该方法仅适用于并非总是给出的偶数儿童数。

    你能帮我找到解决这个问题的方法/算法/方法吗?

    提前致谢!

    保罗


    首先计算级别的数量,然后

    def proclevel(levels):
        if levels > 0:
            generator = proclevel(levels - 1)
            temp = None
            for firsthash, secondhash in generator:
                if not temp: temp = hashofthem(firsthash, secondhash)
                else: yield temp, hashofthem(firsthash, secondhash); temp = None
            #If odd number of packets
            if temp: yield temp, None
        else:
            temp = None
            for chunk in chunks:
                if not temp: temp = hash(chunk)
                else: yield temp, hash(chunk); temp = None
            if temp: yield temp, None
    

    确保在hashofthem中处理None作为第二个参数:)

    链接地址: http://www.djcxy.com/p/62833.html

    上一篇: Reverse tree building (with an odd number of children)

    下一篇: Crashes during indexing