【问题标题】:Possible to combine/concatenate MD5 hashes?可以组合/连接 MD5 哈希吗?
【发布时间】:2018-04-10 09:57:31
【问题描述】:

对于 CRC32,可以组合两个哈希,这样给定两个流 A 和 B,我们可以找出 CRC(A+B) 只知道 CRC(A)、CRC(B) 和长度(B) . (实现可用 here,以及 Mark Adler here 对其工作原理的解释)。

这让我们可以并行计算单个流上的哈希值,或者计算大型 上的哈希值(如“不适合内存”)仅在其包含媒体上使用前向搜索的分段流(这为非常慢的媒体上的加速提供了巨大的潜力)

似乎没有可用于其他更复杂的散列算法(如 MD5)的此类行为的实现。这种行为在 MD5 中根本不可能吗?是不是很难做到没有人愿意尝试?更复杂的算法,如 SHA1 或 SHA256 呢?我很想听听对此的任何见解。

【问题讨论】:

  • 流式散列很常见;这是一个 PHP 示例:php.net/manual/en/function.hash-init.php。但是,这些算法在流式传输期间可能需要更多的上下文,而不仅仅是 md5(A)md5(B)length(B)
  • 我实际上在问一些不同于流式散列的东西。我知道我可以执行 Init()、Update(A)、Update(B)、Z=Finalize()。我正在尝试执行 Init()、Update(A)、X=Finalize()、Init()、Update(B)、Y=Finalize()、Z=Combine(X,Y)。使用 CRC32 是可能的,但我觉得使用任何更复杂的流行哈希算法我都不走运。
  • MD5、SHA1 和我知道的所有其他 cryptographic 散列函数不具有 CRC 所具有的代数属性。任何此类属性都将代表加密环境中的毁灭性弱点。特别是,它们都不能像 CRC 那样在单独的块上并行计算。
  • 这就是我害怕的。谢谢!

标签: hash md5 sha1 sha256 crc32


【解决方案1】:

应该对于任何加密散列都是不可能的。如果可能,那么该散列将不再被视为加密。

【讨论】:

    猜你喜欢
    • 2011-02-11
    • 1970-01-01
    • 2017-07-13
    • 2011-01-13
    • 2010-12-01
    相关资源
    最近更新 更多