我需要部分发送数据,同时我需要为我的整数数据提供sha256。
像这样cat large file | chunker | receiver
其中接收器是预期接收数据的应用程序,可能是在有效载荷的头部sha256中具有的块中,然后是跟随有效载荷。收集完所有块之后,它应该存储整个传输的数据,以及所有数据的sha256(特别是sha256将仅用于重新传输并确认数据的完整性。)
当然,最简单的事情是接收器从整个流数据生成sha256,但我想知道是否有一种更简单的方法是收集所有块的所有哈希值,并将它们组合起来生成一个最终哈希值,将与从所有数据计算的哈希值相同。
换句话说 - 我从标题中复制了这个 - 我想知道是否有一个函数F会接收数据块的哈希列表,然后生成的最终哈希值等于所有哈希值生成的哈希值数据。
再说一遍,换句话说,有这个公式: F(sha256(数据[0]),sha256(数据[1]),... sha256(数据[N]))= sha256(数据[0..N])
F的功能是什么? 它是一个通用函数还是没有计算散列的方式?
我怀疑没有这样的功能,或者这个问题太复杂了。
答案 0 :(得分:0)
AFAIK还没有针对SHA-256的已知冲突,但我敢打赌,一旦找到一些,即有人发现两条消息m1
和m2
,使SHA-256(m1) = SHA-256(m2)
,那么几乎任何前缀a
哈希SHA-256(a || m1)
和SHA-256(a || m2)
都会有所不同,即您询问的函数实际上不是函数(对于相同的输入具有不同的输出)。或者说,否则SHA-2容易受到长度扩展攻击,但AFAIK不会为攻击添加前缀。即使这实际上是一个功能,它仍然不足以让你存在这样的功能,你也希望它快。而且我相信没有这么快的计算功能。
另一方面,SHA-256的工作原理是将原始消息拆分为512位块并使用定义良好的进程(基于所有先前块的状态)处理它们,因此从理论上讲,您可以修改一些实现SHA-256
同时计算两个哈希值(通过将相同的逻辑应用于不同的初始状态):
这可能比独立完成这些事情要快一些,但我不知道为这样的自定义实现辩护是否会快得多。