2

如果我生成一个字符串的 MD5 哈希,然后将其截断为 25 个字符,是否有可能对其进行暴力破解?像加盐一样安全吗?

4

1 回答 1

0

我不是加密专家,但我想截断会有点类似于加盐。当你加盐时,你用随机数据填充你的输入数据,然后生成一个哈希值。所以本质上,

hash = md5(pass + 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 个字符。攻击者需要知道截断发生在哪里以及如何发生。是从末端切还是从前面切?从哈希中随机挑选?但是,鉴于哈希值通常会非常不同,您可以实现一些概率。

例如,以 cat 哈希为例。我从末尾截断了 7 个字符...

cat = d077f244def8a70e5ea758bd8352fcd8
cat = d077f244def8a70e5ea758bd8

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

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

Soooo,我宁愿实施自己的盐渍解决方案,也不愿截断。如果您希望截断以节省几个字节的空间,请实施盐而不是截断!

于 2012-12-13T19:54:27.780 回答