增加md5输出的长度

Posted

技术标签:

【中文标题】增加md5输出的长度【英文标题】:Increasing the length of md5 output 【发布时间】:2020-03-12 19:20:27 【问题描述】:

我有一个与 MD5 和 SHA-1 等旧哈希有关的问题。两者肯定都不是很安全,但是有没有办法增加它的输出长度呢? MD5 的输出长度为32 十六进制数字或16 bytes,我想将其扩展为18 bytes(例如)。

这样可以滥用标准算法吗?有没有针对它的攻击?某种值溢出?

我正在对一个文件进行逆向工程,这对于理解其工作流程非常方便。文件本身使用 C++ 中的CryptCreateHash 函数进行散列(如果它是有用的信息)

谢谢。

【问题讨论】:

【参考方案1】:

不,不是您想问的那种方式。哈希定义本身依赖于特定大小的内部缓冲区并定义输出的大小。你不能将 MD5 输出延长到更长的时间,而不是……不再是 MD5。

通常,您可以通过重复散列并添加随机前缀来“加强”弱散列,以避免可能的彩虹表。例如在PBKDF2 中,您仍然可以使用较旧的散列 - 但因为您通常会使用盐、HMAC 构造和许多散列迭代,所以它比散列本身要困难得多。例如,我不会对使用 PBKDF2-HMAC-MD5 进行足够迭代的密码进行哈希处理感到不安全。

PBKDF2 也是一个很好的系统,可以将现有哈希扩展为更大的输出 - 类似于您所询问的内容。

【讨论】:

感谢您的回答!我问这个不是为了“加强”,我知道这种方式(但仍然感谢您的解释)。我对此很好奇,正在寻找一些我还不知道的哈希漏洞。【参考方案2】:

安全是相对的,使用 MD5 来确定您的应用程序中的任何文件是否需要更新(例如 Steam 验证缓存)是完全可以接受的。一般来说,修改密码标准从来都不是一个好主意,特别是如果这不是您的专业知识。您可以使用一些自定义加密,例如滚动异或密钥,然后使用 MD5 进行一些额外的屏蔽。我有点困惑你为什么要问这个问题,尽管与反转使用 CryptCreateHash 的二进制文件有关。

【讨论】:

是的,很抱歉,如果这听起来令人困惑。关键是我不想在修改 MD5 等的情况下创建任何新内容。我试图找到打破 MD5 最终输出的方法。对我来说,它可能会导致我正在反转的文件出现一些溢出问题(这就是我正在寻找的)。它已经以标准方式使用 MD5,我对此无能为力,但我可以尝试输入一些值来破坏它(如果有的话)

以上是关于增加md5输出的长度的主要内容,如果未能解决你的问题,请参考以下文章

关于sha1加密与md5加密

HASH中的MD5

MD5加密

hashlib模块

如何增加 sqlplus 列输出长度?

hash和md5