PHP-这种散列有多安全/强大?

PHP-这种散列有多安全/强大?,php,hash,Php,Hash,所以我试图创建一个强大的散列算法,现在我想知道,它有多强大 这就是我想到的: function bHash($text, $salt) { foreach (array_reverse(hash_algos()) as $hash) { $hash .= hash($hash, $text . $hash . $salt); } return "_bH/" . $salt . "/" . str_replace("/", "+", crypt($hash, $salt))

所以我试图创建一个强大的散列算法,现在我想知道,它有多强大

这就是我想到的:

function bHash($text, $salt)
{
  foreach (array_reverse(hash_algos()) as $hash) {
    $hash .= hash($hash, $text . $hash . $salt);
   }

  return "_bH/" . $salt . "/" . str_replace("/", "+", crypt($hash, $salt));
}

echo bHash($password, "KB8NtFIN"); // I am using a different salt for each password!
因此,我在hash函数中进行每一次哈希运算,并使用salt 8 random string+hashname对其进行一次又一次的哈希运算

例如,hello的结果是:_bH/KB8NtFIN/KBumi3+cVUUtU

那么,这有多安全/牢固

PHP-这种散列有多安全/强大

简单回答:不太好

长话短说:与PGP或varios bCrypt实现等行业标准相比,它不是很强大

更长的答案:我不想剽窃提供的答案,但请阅读该链接,阅读这些非常长和非常详细的答案,关于您自己的哈希算法的众多和各种陷阱

模糊处理不是散列,仅仅因为你看不懂它并不意味着其他人看不懂

正如扎夫所提到的,这是一个相关的问题

如果你每次都换盐,吃盐有什么意义?盐需要通过算法识别,举一个非常简单的例子:你有一个状态为a=b+c的代数。用于查找a值的方程式的最小数目是未知变量的数目。所以在这个例子中,一个代表b,一个代表c,如果你有hash=salt+password,如果你只有一个方程,hash,你不能从hash中找到salt和password值

如果你的盐含有/字符怎么办?如果您的密码包含/字符怎么办


另外,JimL发布的有关IRCMaxwells资料的链接也很值得一读

只有一个问题:你为什么要这样做?这实际上是一个非常复杂的问题,我怀疑很多人能完全或正确地回答这个问题。如果你这么做是为了他妈的,那对你有好处,如果你打算在生产中使用它,那就不要。但是,如果你对为什么你不应该写自己的东西很好奇,那就去看看。@Matthew不太安全。有些人比你更了解密码学。最好还是用他们给我们的东西。除非你在学习密码学,否则我不会为这个练习操心。Matthew,你可能会读@Matthew,我建议你读一下密码兼容层作者的这两篇博文。和他们可以提供有价值的见解,让我们知道即使是一个经过审核/批准的哈希算法也很容易搞糟。