Hash CRC32&x2B;尺寸vs MD5/SHA1

Hash CRC32&x2B;尺寸vs MD5/SHA1,hash,md5,storage,crc32,Hash,Md5,Storage,Crc32,我们有一个文件存储器,存储器根据附加到crc32的大小唯一地标识文件 我想知道这个校验和(CRC32 +大小)是否足够好来识别文件,或者我们应该考虑一些其他的散列技术,例如MD5/Sh1?< P>CRC,是一个比严重的哈希函数更为错误的检测方法。它有助于识别损坏的文件,而不是唯一地识别它们。 因此,您应该在MD5和SHA1之间进行选择 如果你没有强烈的安全需求,你可以选择更快的MD5。 (请记住,MD5容易受到碰撞攻击)。 如果您需要更高的安全性,最好使用SHA1甚至SHA2。正如其他人所说,C

我们有一个文件存储器,存储器根据附加到crc32的大小唯一地标识文件


我想知道这个校验和(CRC32 +大小)是否足够好来识别文件,或者我们应该考虑一些其他的散列技术,例如MD5/Sh1?

< P>CRC,是一个比严重的哈希函数更为错误的检测方法。它有助于识别损坏的文件,而不是唯一地识别它们。 因此,您应该在MD5和SHA1之间进行选择

如果你没有强烈的安全需求,你可以选择更快的MD5。 (请记住,MD5容易受到碰撞攻击)。
如果您需要更高的安全性,最好使用SHA1甚至SHA2。

正如其他人所说,CRC不能保证没有冲突。但是,只要给文件增加64位数字,您的问题就可以得到解决。这保证不会发生冲突(除非您希望将数以百万计的文件保存在一个目录中,这无论如何都不是一个好主意)

CRC-32不够好;构建冲突很简单,即两个具有相同CRC-32的文件(如果您愿意,长度相同)。即使在没有恶意攻击者的情况下,当您有大约65000个长度相同的不同文件时,冲突也会随机发生

哈希函数用于避免冲突。使用MD5或SHA-1时,不会出现随机碰撞。如果您的设置与安全相关(即,在某个地方,有人可能会主动尝试创建冲突),那么您需要一个安全的哈希函数。MD5不再安全(用MD5创建冲突很容易),而SHA-1在这方面有点弱(没有计算实际的冲突,但创建冲突的方法是已知的,虽然昂贵,但比它应该的要便宜得多)。通常的建议是使用SHA-256或SHA-512(SHA-256对于安全性来说已经足够了;SHA-512在大的64位系统上可能要快一点,但文件读取带宽比哈希速度更有限)

注意:使用加密哈希函数时,不需要存储和比较文件长度;散列足以消除文件的歧义


在非安全设置中(即,您只害怕随机碰撞),则可以使用。它作为一个加密哈希函数被彻底“破坏”,但它仍然是一个非常好的校验和,而且速度非常快(在一些基于ARM的平台上,它甚至比CRC-32更快,以更好地抵抗随机冲突)。基本上,您不应该使用MD5:如果您有安全问题,那么就不能使用MD5(它已损坏;请使用SHA-256);如果您没有安全问题,那么MD4比MD5快。

CRC32+大小将使用的空间为您提供足够的空间,以容纳更大的CRC,这将是一个更好的选择。如果你不担心恶意碰撞,那么托马斯的答案适用于这种情况


<>你没有指定语言,但是例如在C++中,你给了你想要的大小的CRC(或者你可以负担得起)。不要使用它或至少将它与其他方法结合使用。@状态\u访问\u拒绝:+1您是对的。我永远不会用MD5做任何事情。无论如何,我认为@Rajiv的意图与安全无关。因此,对于本地存储,即使是MD5也可能是C语言实现的一部分。我将研究BoostCRC。谢谢