首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用零流优化MD5/SHA1更新

使用零流优化MD5/SHA1更新
EN

Stack Overflow用户
提问于 2013-02-22 00:41:14
回答 3查看 496关注 0票数 4

是否有可能对函数进行优化:

代码语言:javascript
复制
MD5_Update(&ctx_d, buf, num);

如果您知道buf只包含零?

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

SHA1也是如此。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-22 20:03:03

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

显然,只有在保存一个或多个散列计算块的情况下,此解决方案才会更快。例如,如果您散列3个字节或16个字节,这并不重要,因为在使用之前,输入将被散列函数填充和扩展。

票数 2
EN

Stack Overflow用户

发布于 2013-02-22 01:53:56

实际上,加密哈希被认为会对输入的微小变化产生显著的输出变化,请参阅http://en.wikipedia.org/wiki/Avalanche_effect。这听起来像是你在寻找一些散列数据和一些预先填充了零的散列数据之间的关系。通过设计,输入中的这种更改应该会产生没有明确关联的输出。

编辑:为了直接回答你的问题,通过设计“密钥或明文中的一个小变化应该会导致密文中的巨大变化”,这意味着它在数学上很难做到。

票数 1
EN

Stack Overflow用户

发布于 2013-02-22 01:55:51

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

SHA-1与固定IV的SHA-1有一个已知的加速比,并且消息只有很小的区别。该加速比约为21%。参见New attack makes some password cracking faster - Ars Technica

当你有一个完全固定的消息但有一个变量IV时,你可能会得到类似的加速,但要实现这一点会有很多工作,特别是作为一个非专家。购买额外的硬件可能比将代码速度提高几个百分点要便宜得多。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15007629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档