反向树木建设(奇数个孩子)
我刚刚发现了有关AWS Glacier服务,并希望编写一个小型Python应用程序来通过REST API上传文件。 我查看了所需的标题,并偶然发现了x-amz-sha256-tree-hash
。 我需要计算整个文件的SHA-256散列以及每个1 MB块的所有散列的父散列。 这导致以下树:
(图片来自这里)
我已经创建了一个读取1 MB大块的函数和一个可以即时计算哈希值的类,然后我完全拼命:
在我的应用程序中,我创建了一个名为chunk
的类,它接受数据并在__init__
方法中计算哈希,并保存父类和子类(如普通树)。 当用户打开一个文件时,这些块实例将会以其各自的散列(在这个例子中将是7个块实例)正确生成。
现在我有两个相互关联的大问题:
我在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