Php 存储密码的散列技术

Php 存储密码的散列技术,php,encryption,Php,Encryption,可能重复: 问题三部分: 我应该使用哪种技术来存储密码?(sha1、SH256/512等) 盐的理想尺寸是多少 我应该用什么 $passwordHash = hash('ENCRYPTION',$salt . $password); 或 我打算只存储论坛密码。我没有存储银行凭证或任何其他高度敏感的项目。它应该是快速的,而不是火箭科学。在我看来,如果可用,您应该使用SHA512,因为它是目前可用的最强大的哈希算法之一 关于盐的大小,我会使用与散列大小相同的一个,因为它为散列添加了

可能重复:

问题三部分:

  • 我应该使用哪种技术来存储密码?(sha1、SH256/512等)
  • 盐的理想尺寸是多少
  • 我应该用什么

    $passwordHash = hash('ENCRYPTION',$salt . $password);    
    


我打算只存储论坛密码。我没有存储银行凭证或任何其他高度敏感的项目。它应该是快速的,而不是火箭科学。

在我看来,如果可用,您应该使用SHA512,因为它是目前可用的最强大的哈希算法之一

关于盐的大小,我会使用与散列大小相同的一个,因为它为散列添加了更多的熵。我将该函数与
rand()
函数结合使用

我会使用与下面类似的代码

<?php
    $password = 'password';
    //Generate the salt
    $salt = hash('sha512',uniqid('',true) . rand());
    //Hash our password with the salt
    $passwordHash = hash('sha512',$salt . $password);
?>

在我看来,如果可用,您应该使用SHA512,因为它是目前可用的最强大的哈希算法之一

关于盐的大小,我会使用与散列大小相同的一个,因为它为散列添加了更多的熵。我将该函数与
rand()
函数结合使用

我会使用与下面类似的代码

<?php
    $password = 'password';
    //Generate the salt
    $salt = hash('sha512',uniqid('',true) . rand());
    //Hash our password with the salt
    $passwordHash = hash('sha512',$salt . $password);
?>

我使用了MD5,但因为大家都知道它是,所以我现在使用SHA-2

$hash = hash('sha256', $pass); - creates 256 bit hash.

我使用了MD5,但因为大家都知道它是,所以我现在使用SHA-2

$hash = hash('sha256', $pass); - creates 256 bit hash.

就我个人而言,我还是会选择MD5——它非常快,并且得到了广泛的实施

尽管安全研究人员已经找到了一种方法来生成两个文本块,从而产生相同的MD5哈希(“碰撞攻击”),但还没有已知的实际方法来创建一个生成特定哈希(a”)的文本块


只要确保你有一个相当长的salt(16个随机字节就足够了),以确保黑客不能使用“彩虹表”来反转你的哈希值。

就我个人而言,我还是会使用MD5——它非常快,并且得到了广泛的实现

尽管安全研究人员已经找到了一种方法来生成两个文本块,从而产生相同的MD5哈希(“碰撞攻击”),但还没有已知的实际方法来创建一个生成特定哈希(a”)的文本块

只要确保你有一个相当长的salt(16个随机字节就足够了),以确保黑客不能使用“彩虹表”来反转你的散列

  • 正如你所说的,它没有那么敏感
  • 有,但如果你想要精确的数字,就让它是32
  • 任何,因为salt的主要目的是不给坏人判断,两个密码是否相同
  • 例如,我是某个系统的开发人员,决定只存储login-n-password散列:

    user1:qjwhegwqe7865weq786ew7q8 user2:kl21j3kl21j3kl21j3kl12jk user3:qjwhegwqe7865weq786ew7q8 用户1:qjwhegwqe7865weq786ew7q8 用户2:kl21j3kl21j3kl21j3kl12jk 用户3:qjwhegwqe7865weq786ew7q8 正如您所看到的,没有盐,坏人会看到,user1和user3具有相同的密码。这就是盐被发明的原因——它总是产生不同的散列。这只是一个目的

  • 正如你所说的,它没有那么敏感
  • 有,但如果你想要精确的数字,就让它是32
  • 任何,因为salt的主要目的是不给坏人判断,两个密码是否相同
  • 例如,我是某个系统的开发人员,决定只存储login-n-password散列:

    user1:qjwhegwqe7865weq786ew7q8 user2:kl21j3kl21j3kl21j3kl12jk user3:qjwhegwqe7865weq786ew7q8 用户1:qjwhegwqe7865weq786ew7q8 用户2:kl21j3kl21j3kl21j3kl12jk 用户3:qjwhegwqe7865weq786ew7q8
    正如您所看到的,没有盐,坏人会看到,user1和user3具有相同的密码。这就是盐被发明的原因——它总是产生不同的散列。这只是目的之一。

    这些不是加密技术。这些是散列技术。我会投你一票,因为你说快,md5。如果它是一个简单的论坛,我怀疑你需要更安全的哈希算法,比如BLIPT。在你提交问题之前,你应该考虑阅读。那些不是加密技术。这些是散列技术。我会投你一票,因为你说快,md5。如果它是一个简单的论坛,我怀疑你需要更安全的哈希算法,比如BLIPT。在你提交问题之前,你应该考虑阅读。在你看来,为什么SAH-2没有被破坏,MD5是?我被告知MD5的碰撞率要高得多,这将使安全性降低。如果我错了,请纠正我!我对hasing算法知之甚少!我只是想和大家分享一下我所使用的,与现有MD5散列发生冲突的可能性(否则是意外的)是完全可以忽略不计的。MD5的冲突率确实要高得多,但在现实世界的应用程序中,在我们的网站达到Facebook的规模之前,我们这些凡人不必担心什么。您还必须知道,MD5/SHA算法的设计速度很快,并且容易受到彩虹表攻击,破解大多数长度高达8个字符的用户密码只需几个小时。Bcrypt使彩虹表破解变得不太可行,因为它将执行时间从几个小时延长到几年,但速度很慢。。嗯,它很慢:)哦,我明白了,所以除非你的网站达到了令人印象深刻的用户数量,否则MD5是安全的?它比SHA和Bcrypt快得多吗?在你看来,为什么SHA-2没有损坏,而MD5是?我被告知MD5碰撞率要高得多,这会降低安全性。如果我错了,请纠正我!我对hasing算法知之甚少!我只是想和大家分享一下我所使用的,与现有MD5散列发生冲突的可能性(否则是意外的)是完全可以忽略不计的。MD5的冲突率确实要高得多,但在现实世界的应用程序中,在我们的网站达到Facebook的规模之前,我们这些凡人不必担心什么。您还必须知道,MD5/SHA算法的设计速度很快,并且容易受到彩虹表攻击,破解大多数长度高达8个字符的用户密码只需几个小时。Bcrypt制造ra