在blowfish加密哈希中找到salt

时间:2011-08-25 07:03:39

标签: c++ blowfish crypt

这是一个非常基本的问题。我已经搜索过这方面的帮助,但找不到任何具体的答案。因此,我在这里特别要求它。

用例是,我想找到指向可用哈希列表的弱密码。为此,我必须将每个已知/常用单词的散列与可用散列进行比较。所有这些都是使用openssl / blowfish.h在C ++ for Unix中完成的。

但是,要创建此猜测字的哈希值,需要使用与密码哈希值相同的盐生成。

我的问题是如何从密码哈希中提取盐。 假设,以下是我的哈希:

$ 2A $ 10 $ FTx8T5QrEbxYVe.NJ6iOhuei.V9qgl60xF8 / 8s7iZRDIlOl.ibDEW

这是什么盐?或者我如何实现目标?任何指针都会很棒!!

先谢谢。

3 个答案:

答案 0 :(得分:2)

只需将密码哈希作为盐传递 - 它足够聪明地提取自己。这是crypt()

的惯例

请参阅现代Unix下的How Passwords Work in Unix, Mac OS, and Windows和“BSD风格”哈希

注意:salt的{​​{1}}参数不是盐。它是crypt(),所以你不应该自己提取盐。 - 由于历史(DES时代)的原因,它被称为$algorithm$salt$MORESALTsomething

另见Why does crypt/blowfish generate the same hash with two different salts?

答案 1 :(得分:1)

密码哈希函数的“salt”与密码连接,然后对结果字符串进行哈希处理。为了取回盐,这意味着你需要找回被散列的字符串。显然,这有两个主要问题:

  1. 如果您能够取回散列字符串,它还会包含明文密码。这将是哈希函数的主要安全性失败。
  2. 您还必须弄清楚连接字符串的哪个部分是salt,以及密码。

答案 2 :(得分:0)

这不是盐的重点吗?你不知道它是什么?所以没有人可以来做你现在想做的事情吗?

我理解盐的方式是:

  • 你有一个字符串,我们称之为password
  • 你有和算法,它接受一个字符串并从中产生一个哈希值。我们称之为blowfish
    • 甚至是正确的吗?河豚是一种哈希算法吗?我不这么认为!!!
    • 让我们调用我们的算法md5
  • md5会为password生成一个哈希值,但它会始终生成相同的哈希值
  • 你有一个坏人。我们叫他Mrun
  • Mrun尝试通过使用字典中的一堆已知密码测试password来找出md5
  • 不仅仅使用password,而是使用password + salt,会产生不同的哈希并且Mrun被挫败。

如果您需要找到salt,则必须至少有一个已知的密码和哈希组合。然后你可以尝试使用蛮力来找出盐。祝好运。哦,我希望你在这里不是邪恶的。哦,我希望其余的邪恶生物也无能为力......