我有一个xml文件,需要确定它是否是重复的。
我要么对整个xml文件进行哈希处理,要么使用xml文件中的特定节点来生成某种哈希值。
这种情况下,md5适用吗?还是需要其他什么方法?生成哈希的速度也很重要,但保证唯一数据产生唯一哈希值更为重要。
我有一个xml文件,需要确定它是否是重复的。
我要么对整个xml文件进行哈希处理,要么使用xml文件中的特定节点来生成某种哈希值。
这种情况下,md5适用吗?还是需要其他什么方法?生成哈希的速度也很重要,但保证唯一数据产生唯一哈希值更为重要。
MD5已经被攻破(也就是说有可能故意生成哈希碰撞),如果你担心有人恶意创建与另一个文件相同哈希值的文件,那么你应该使用SHA系列算法(例如:SHA-256或SHA-2)。
MD5是一种适用且快速的加密算法。但是请注意,仅有一个字符的差异就会产生完全不同的MD5值。
尽管MD5有可能对不同的输入产生相同的哈希值,但这种情况非常罕见。因此,根据您的输入(您是否期望许多类似的XML文件或许多不同的文件?),当MD5给出匹配结果时,您可以比较纯文本内容。
如果没有安全问题(即没有人会主动尝试找到碰撞,你只是担心因为运气不好而发生碰撞),那么密码学上弱的哈希函数是一个选择,前提是它们有足够大的输出,使得2n/2远远大于您将比较的XML文件的预期数量。对于n = 128(即2n/2接近十八万亿亿),MD5是可以的,快速且广泛支持。您可能需要调查一下MD4,它甚至更弱,但速度更快。如果您想要更大的n,请尝试SHA-1,它提供160位的输出(此外,SHA-1的弱点目前仍然是理论性的,因此SHA-1比MD5“密码学上破解”要少得多)。
如果你拥有即使是潜在的安全问题,那么选择 SHA-256。目前该函数没有关于碰撞的加密弱点。如果你遇到性能问题(这是相当不可能的:在基本 PC 上,SHA-256 每秒可以处理超过 100MB 的数据,所以 XML 解析的机会要比哈希更昂贵),请考虑 SHA-512,在提供 64 位整数类型的平台上速度有所提升(但在不提供的平台上速度相对较慢)。é
和 é
都代表相同的字符 é
)。由你来定义你想使用哪种等价概念;参见 canonical XML。