4

是否可以优化功能:

MD5_Update(&ctx_d, buf, num);

如果你知道buf它只包含零?

或者这在数学上是不可能的?

SHA1 也是如此。

4

3 回答 3

2

如果您控制哈希函数的输入,那么您可以使用简单的计数而不是所有的零,也许使用某种转义。例如,十六进制的 000020 可能意味着 32 个零。(非常)基本的压缩功能可能比 MD5 或 SHA1 快得多。

显然,如果您保存一个或多个哈希计算块,此解决方案只会更快。例如,散列 3 个字节或 16 个字节都没有关系,因为输入将在使用之前由散列函数填充和扩展。

于 2013-02-22T12:03:02.720 回答
1

密码散列实际上应该对输入的微小变化产生显着的输出变化,请参阅http://en.wikipedia.org/wiki/Avalanche_effect。听起来您正在寻找一些散列数据和一些预先用零填充的散列数据之间的某种关系。按照设计,您输入的这种更改应该会产生不明确相关的输出。

编辑:要直接回答您的问题,通过设计“密钥或明文的微小变化应该会导致密文发生剧烈变化”,这意味着它数学上很难做到。

于 2013-02-21T17:53:55.823 回答
1

你可能会得到一些加速,但它会相对较小。高性能散列最重要的是选择优化的实现,如果可能的话,使用 GPU(甚至 FPGA/ASIC)来利用并行性。

SHA-1 有一个已知的加速,它具有固定的 IV 和只有一点不同的消息。这个加速大约是 21%。请参阅新攻击使某些密码破解速度更快 - Ars Technica

当您有一个完全固定的消息但变量 IV 时,您可能会获得类似的加速。但要实现这一点需要做很多工作,尤其是作为非专家。购买额外的硬件可能将代码加速几个百分点便宜得多。


如果消息的开头包含多个常量块,则可以对它们进行一次哈希处理,并缓存哈希函数的中间状态。可能适用于您的情况,也可能不适用于您的情况。

于 2013-02-21T17:55:50.703 回答