Php Mysql安全密码存储

时间:2012-11-04 07:10:23

标签: php hash

  

可能重复:
  How do you use bcrypt for hashing passwords in PHP?

将密码存储到Mysql数据库的安全方式或哈希函数是什么?现在我正在使用这个sha1()函数将我的密码存储到DB中,代码如下。这真的很安全吗?

<?php
$pass = 123456789;
$pass = sha1($pass);
echo $pass;
?>

感谢您的建议。

更新

我看到盐就是这样的。

$salt = "this is a salt";
$password = 'this is an password';
$hash = sha1($salt.$password);

那么,我可以使用任何数字/随机数/东西来计算$ salt值吗?之后是现在安全吗?

3 个答案:

答案 0 :(得分:0)

SHA *变体不应用于密码散列。使用Blowfish算法和crypt()函数。

phpass是一个PHP密码哈希库,可以为您简化此操作。

您还可以对该主题进行更多研究,并编写一些代码来生成您自己的Bcrypt / Blowfish兼容Salts并直接使用crypt(),而不是使用phpass库。

答案 1 :(得分:-2)

PHP中散列密码的最佳(和推荐)方法是使用crypt()

以下是PHP文档中的一个简单示例:

$hashed_password = crypt('mypassword');

// now store $hashed_password in the database

稍后,要检查输入的密码(假设$user_input是输入的密码):

// retrieve $hashed_password from the database, then:

if (crypt($user_input, $hashed_password) == $hashed_password) {
   echo "Password verified!";
}

请注意,在此示例(上面)中,首次散列密码时会自动生成salt。这是危险的,应该避免。应该提供伪随机盐,并且可以像这样生成:

$salt = substr(str_replace('+', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 0, 22);

有关更好的解释,请参阅the Stack Overflow question linked by citricsquid

答案 2 :(得分:-3)

您不能对salt使用随机值,因为您无法比较输入的密码和之后存储在数据库中的密码。

你的加密主要是好的,但如果你想要你真的疯了......

<?php
 $salt = "fF#$GGG$T@#4309g9jERGWrgrew@GH";
 $pepper = "vV@@#V90Ù39009gfjigwjorn)(";
 $pass = "123456789";
 $pass = $salt.$pass.$pepper;
 for ($i=0;$i<40;$i++){
    $pass = hash("sha256", $pass)
 }

 echo $pass;

&GT;