假设我在浏览器中将1G文件拆分为1024块1Mb,获取每个块的SHA1并暂时保存此哈希值。最后在对所有块进行散列之后,对所有先前收集的SHA1哈希进行SHA1(执行散列哈希)。然后将此“最终”-hash发送到我的服务器。
这个哈希是否可以安全地识别服务器上的文件? (假设我们有一个安全的连接,而sha1是无冲突的)
执行多个哈希的哈希是不是一个坏主意?
答案 0 :(得分:3)
我猜您的目标是检查上传文件的完整性,比较客户端和服务器端在完成后计算的chekcsum。然后散列每个块,组合它们并散列结果就足够了。
//pseudocode
SHA1.digest (
SHA1.digest(chunk 1) + SHA1.digest(chunk 2) + ... + SHA1.digest(chunk n))
但请注意,您可以在完整文件上执行增量SHA1哈希,将每个块添加到计算中。通过这种方式,结果与在一个步骤中散列整个文件的结果相同,并且您不需要组合时态数据
SHA1.update(chunk 1)
SHA1.update(chunk 2)
...
SHA1.update(chunk n)
SHA1.digest ()
考虑转移到sha256,如评论中所示,但可能为此目的SHA1就足够了
答案 1 :(得分:0)
这应该有效。假设SHA-1为collision free,对于两个不同的文件,至少其中一个哈希值彼此不同。所以" final"哈希也会有所不同。
通常,散列哈希不会提高安全性。如果您想要更高的安全性,请使用SHA-256。