我有一个关于MD5和SHA-1等旧散列的问题。当然,这两种方法都不是很安全,但有什么方法可以增加它的输出长度吗?MD5的输出长度是32
十六进制数字或16 bytes
,我想将其扩展到18 bytes
(例如(。
有可能以这种方式滥用标准算法吗?有人攻击它吗?某种值溢出?
我是逆向工程的一个文件,这可以非常方便地理解它的工作流程。文件本身使用C++中的CryptCreateHash
函数进行散列(如果它是有用的信息(
谢谢。
不,这不是你可能询问的方式。哈希定义本身依赖于内部缓冲区的特定大小,并定义输出的大小。如果不使MD5输出…不再是MD5,就无法将MD5输出扩展得更长。
通常,您可以通过重复哈希并添加随机前缀来"加强"弱哈希,以避免可能的彩虹表。例如,在PBKDF2中,您仍然可以使用较旧的哈希,但因为您通常会使用salt、HMAC构造和许多哈希迭代,所以它比哈希本身要困难得多。例如,我不会对我的密码感到不安全,用PBKDF2-HMAC-MD5进行足够的迭代。
PBKDF2也是一个很好的系统,可以将现有的散列扩展到更大的输出中——类似于您所要求的。
Safe是相对的,使用MD5来确定应用程序中是否有任何文件需要更新(例如Steam Verify Cache(是完全可以接受的。一般来说,修改加密标准从来都不是一个好主意,尤其是如果这不是你的专业知识。您可以使用一些自定义加密,比如滚动xor密钥,然后使用MD5进行一些额外的屏蔽。我有点困惑,你为什么要问这个问题,尽管是关于反转使用CryptCreateHash的二进制文件。