可以截断MD5哈希吗?

时间:2012-11-25 15:35:35

标签: md5 brute-force

如果我生成一个字符串的MD5哈希,然后将其截断为25个字符,是否可以强制它?它是否相对安全,因为盐腌哈希?

1 个答案:

答案 0 :(得分:0)

我不是加密专家,但我认为截断有点类似于腌制。当您加盐时,使用随机数据填充输入数据,然后生成哈希值。基本上,

hash = md5(pass + salt)

这个随机盐显然会影响返回的哈希值,因此如果您使用“密码”作为密码,使用salt,您的哈希值将与从密码派生的哈希值完全不同,“密码”不添加盐。话虽这么说,攻击需要猜测盐水是如何实施的,然后暴力强制盐/密码组合。所以攻击者必须知道盐放在字符串中的哪个位置,所以它就是......

hash = md5(salt + pass) or hash = md5(pass + salt) ?

如果他们能以某种方式猜测,那么他们就需要强制密码+盐值。

hash = md5(password + 1)
hash = md5(password + 2)
hash = md5(password + 3)
....
hash = md5(password + ;fioja4ofu4fioaejfio)
....
hash = md5(password2 + 1)
....

计算量极大!

因此,如果你截断你的哈希,仍然有一些猜测工作要做,尽管可能没那么多工作。考虑一下你获得的md5哈希值,你只需更改几个字符,你的哈希值就会完全改变。

例如,

cat = d077f244def8a70e5ea758bd8352fcd8
cat1 = a980d10665f268b0ec6c13ebea43034f

可以肯定地说,大多数输入都将具有唯一的唯一哈希值。如果您的截断是静态的,让我们说,从32个字符截断到25个。攻击者需要知道截断发生的位置和方式。它是从末端还是前面切成薄片?从哈希中随机挑选?但是,鉴于哈希值通常会非常不同,您可以实现一些概率。

例如,拿猫哈希。我从最后截断了7个字符......

cat = d077f244def8a70e5ea758bd8352fcd8
cat = d077f244def8a70e5ea758bd8

鉴于这些哈希值通常完全不同,截断不会有太大帮助。我可以编写一个简短的脚本来检查截断的哈希值是否与随机输入数据的完整哈希值相关,以查看是否存在x%匹配或其他内容。如果我对cat进行了哈希处理,并且你的截断哈希值与我的cat哈希值的32个字符中的25个匹配,我会非常肯定地说你的截断哈希是用于单词cat,而我只是用其余的填充截断的部分猫哈希。

我在这里说的一切都只是我在脑海里吐唾沫。无论如何我都不是加密/安全专家。我只是涉足随机安全的东西。接受或离开它:)希望它带来一些清晰度。

Soooo,我宁愿实施自己的腌制解决方案,而不是截断。如果你想截断以节省几个字节的空间,实现salt而不是截断!