我面临着将数据分成部分发送的需求,同时我需要为我的整个数据提供sha256。
类似这样的cat large file | chunker | receiver,其中receiver是期望接收数据的应用程序,可能是在有效负载的报头sha256中具有的块中,然后在有效负载之后。在收集所有块之后,它应该存储整个传输的数据,以及所有数据的sha256 (特定的sha256将仅用于重新散列和确认数据的完整性)。
当然,最简单的事情是如果接收器从整个流数据生成sha256,但我想知道是否有一种更简单的方法,收集所有块的所有散列,并将它们组合起来生成一个最终的散列,该散列将与从所有数据计算的散列相同。
换句话说-我从标题中复制了这个-我想知道是否有一个函数F可以接收数据块的散列列表,然后生成最终的散列,该散列将等于对所有数据生成的散列。
再一次,换句话说,有这个公式:F(sha256(数据),sha256(data1),...sha256(dataN)) =sha256(数据0..N)
函数F是什么?它是一个通用函数,还是计算散列的方式没有这样的东西?
我怀疑没有这样的功能,或者这是一个太复杂的问题,无法回答。
发布于 2018-06-01 10:10:03
AFAIK仍然没有已知的冲突,但我打赌一旦发现一些,即有人发现两个消息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的某些实现,以同时计算两个散列(通过将相同的逻辑应用于不同的初始状态):
应用程序定义的区块的
这可能会比单独做这些事情快一点,但我不知道这样一个自定义实现的合理性是否会快很多。
https://stackoverflow.com/questions/50632444
复制相似问题