将密码存储到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值吗?之后是现在安全吗?
答案 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;