当前位置:  开发笔记 > 运维 > 正文

使用2种不同的哈希函数是检查文件完整性的好方法吗?

如何解决《使用2种不同的哈希函数是检查文件完整性的好方法吗?》经验,为你挑选了1个好方法。

我有一个网站,用户可以上传他们的文件; 这些存储在服务器上,其元数据记录在数据库中.我正在实现一些简单的完整性检查,即"这个文件的内容现在是逐字节的,与上传时相同吗?"

一个例子:对于内容userfile.jpg,MD5哈希是39f9031a154dc7ba105eb4f76f1a0fd4和SHA-1哈希是878d8d667721e356bf6646bd2ec21fff50cdd4a9.如果此文件的内容发生更改,但前后具有相同的MD5哈希值,则SHA-1哈希值是否也可能保持不变?(使用散列,有时你可以得到哈希冲突 - 这可能会同时发生两种不同的哈希算法吗?)

或者为一个文件计算两个不同的哈希值没有意义(我应该尝试其他一些机制来验证完整性)?


编辑:我并不是真的担心意外腐败,但我应该阻止用户不加注意地改变文件(生日攻击和朋友).

我可能会选择一个哈希值SHA-512 - 这种检查通常不会成为性能瓶颈,无论如何,"正如Bruce Schneier所说,已经存在足够快速,不安全的系统. - @ MichaelGG评论".



1> MichaelGG..:

MD5对你正在做的事情可能是安全的,但是没有理由继续使用已知缺陷的哈希.事实上,没有理由你不应该使用SHA256或SHA512,除非你有一些已知的主要性能瓶颈.

编辑:澄清一下,没有理由使用两种算法; 只需使用符合您需要的产品.如果您担心人们会对您进行MD5冲突(例如,这是一种安全威胁吗?),那么请使用一种不那么弱的算法,例如SHA256.

编辑2:解决一个显然仍然常见的误解:在哈希上找到随机碰撞的概率不是1/2 ^ n.它接近1/2 ^(n/2).因此,128位散列可能会与2 ^ 64次尝试发生冲突.有关详情,请参阅生日攻击

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有