我有一个网站,用户可以上传他们的文件;这些存储在服务器上,它们的元数据记录在数据库中。我正在实施一些简单的完整性检查,即“这个文件的内容现在是否与上传时的字节内容相同?”
一个例子:对于 的内容userfile.jpg
,MD5 哈希是39f9031a154dc7ba105eb4f76f1a0fd4
SHA-1 哈希是878d8d667721e356bf6646bd2ec21fff50cdd4a9
。如果这个文件的内容发生了变化,但前后的 MD5 哈希值相同,那么 SHA-1 哈希值是否也可能保持不变?(使用散列,有时您可能会遇到散列冲突 - 这会同时使用两种不同的散列算法吗?)
或者是为一个文件计算两个不同的哈希值(我应该尝试一些其他机制来验证完整性)?
编辑:我并不真正担心意外损坏,但我应该防止用户更改文件而不引起注意(生日攻击和朋友)。
我可能会选择一个哈希,SHA-512——检查不会经常成为性能瓶颈,无论如何,“正如 Bruce Schneier 所说,已经有足够快、不安全的系统了。-@MichaelGG 在评论”。