1

可能重复:
如何在 PHP 中使用 bcrypt 对密码进行哈希处理?

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

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

感谢您的意见。

更新

我看到盐是这样的。

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

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

4

3 回答 3

0

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

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

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

于 2012-11-04T07:20:10.707 回答
-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 = substr(str_replace('+', '.', base64_encode(pack('N4', mt_rand(), mt_rand(), mt_rand(), mt_rand()))), 0, 22);

如需更好的解释,请参阅citricsquid 链接的 Stack Overflow 问题

于 2012-11-04T07:23:05.290 回答
-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;

?>

于 2012-11-04T07:22:04.773 回答