如何在对象树上创建SHA1摘要?

时间:2010-05-27 14:15:14

标签: sha1 digest

假设我有一个对象树,每个对象都有一个字符串表示。我想在整个树上创建一个SHA1摘要。

最简单的方法是以递归方式遍历树的每个节点。对于每个节点,我将连接所有子节点的SHA1摘要(作为简单字符串),将给定节点的字符串表示添加到此连接字符串,并对其执行SHA1。这将是给定节点的SHA1摘要。

问题是这个摘要是否会像“好”一样,好像我会连接子节点的字符串表示,而不是子节点的摘要?

由于

2 个答案:

答案 0 :(得分:2)

这比散列孩子的连接要好。考虑以下树:

    • AA
    • AB

连接时,变为“AAAB”。与以下树形成对比:

    • AAA

不同,但串联的哈希值是相同的。

答案 1 :(得分:1)

假设您可以选择节点标签中从不允许的Unicode字符。

然后,您可以使用流API(如Java MessageDigest)类以树顺序提供所有标签,并在其间插入保留的分隔符。

最后,你有一个相对紧凑的摘要,无需支付额外的SHA计算水平。

修改

上面的方案并不完全正确,但是,原来的问题也是如此,因为它不会对树的结构进行编码。代码需要为每个节点构建某种ID,这种ID不仅仅是遍历顺序,并且包含在节点的哈希输入中,因此具有不同形状但相同标签的树不会相同地散列。

如果树顺序很重要但结构不精确,那么答案中的原始方案是有效的。