C++ 在河豚肉里找到盐

C++ 在河豚肉里找到盐,c++,blowfish,crypt,C++,Blowfish,Crypt,这是一个非常基本的问题。我一直在寻求帮助,但找不到任何具体的答案。因此,我在这里特别提出这个问题 用例是,我想找到弱密码,它引用可用的哈希列表。为此,我必须将每个已知/常用单词的哈希值与可用哈希值进行比较。所有这一切都是用C++在UNIX中使用OpenSSL/BooFiver完成的。 但是,要创建此猜测词的哈希,需要使用与密码哈希相同的salt生成 我这里的问题是如何从密码散列中提取salt。 假设以下是我的哈希: $2a$10$FTx8T5QrEbxYVe.NJ6iOhuei.V9qgl60x

这是一个非常基本的问题。我一直在寻求帮助,但找不到任何具体的答案。因此,我在这里特别提出这个问题

用例是,我想找到弱密码,它引用可用的哈希列表。为此,我必须将每个已知/常用单词的哈希值与可用哈希值进行比较。所有这一切都是用C++在UNIX中使用OpenSSL/BooFiver完成的。 但是,要创建此猜测词的哈希,需要使用与密码哈希相同的salt生成

我这里的问题是如何从密码散列中提取salt。 假设以下是我的哈希:

$2a$10$FTx8T5QrEbxYVe.NJ6iOhuei.V9qgl60xF8/8s7izrdiol.ibDEW

这里面的盐是什么?或者我怎样才能达到目标?任何指针都会很棒


提前谢谢。

这不是重点吗?你不知道那是什么?所以没人能来做你现在想做的事

我对salt的理解是:

  • 您有一个字符串,我们称它为
    密码
  • 还有一个算法,它接受一个字符串并从中产生一个散列。我们把它叫做河豚
    • 这是对的吗?河豚是散列算法吗?我不这么认为
    • 让我们调用我们的算法
      md5
  • md5
    将为
    password
    生成一个哈希值,但它始终会生成相同的哈希值
  • 你有个坏人。我们叫他
    Mrun
  • Mrun
    通过使用字典中的一组已知密码测试
    md5
    来尝试找出
    密码
  • 通过不仅仅使用
    password
    ,而是使用
    password+salt
    ,将生成不同的散列并阻止
    Mrun

如果您需要查找salt,则必须至少有一个已知的密码和哈希组合。然后你可以试着用蛮力找出盐。祝你好运哦,我希望你不是在这里作恶。哦,我希望其他的邪恶生物也不知道…

只要把密码散列作为盐传递就行了——它足够聪明,可以提取自己。这是
crypt()

请参阅现代Unix和“BSD风格”哈希下的

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

另请参见

密码散列函数的“salt”与密码串联,然后对结果字符串进行散列。要取回盐,这意味着您需要取回散列的字符串。显然,这有两个主要问题:

  • 如果您能够取回那个散列字符串,它还将包含明文密码。这将是散列函数的一个主要安全失败
  • 您还必须确定连接字符串的哪个部分是salt,哪个部分是密码

  • 杰夫·阿特伍德(Jeff Atwood)关于salt、hashing和rainbow表的精彩文章您在这里有一些误解——如果您无法获得salt,如何验证密码是否正确?salt用于防止预编译表,但不是即时表。这也是你不应该重复使用salt的原因。我想你误解了我-如果你找到了salt(通过猜测,对密码应用哈希算法,并使用已知哈希进行猜测和检查),那么你可以使用salt重新编译你的表并破解其余密码。我同意J-16。在适当的设置中,每个用户都有自己的盐值。没有盐这种东西。即,密码表将有三列:
    User、Salt、Hash
    。是。我已经看到了第二个链接。仅基于此,我做出了一些假设,但这些假设实际上并不适用于我,也不会产生意想不到的结果。我无法理解我应该如何在我的用例中使用blowfish API。我可以使用blowfish API实现同样的效果吗?我不这么认为——密码哈希中使用的blowfish是一个修改过的。