增加md5输出的长度

Increasing the length of md5 output

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

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

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

谢谢。

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

不,不是您可能问的那种方式。散列定义本身依赖于特定大小的内部缓冲区并定义输出的大小。你不能将 MD5 输出扩展到更长而不使它...不再是 MD5。

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

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