加密数据库中的密码

时间:2015-03-30 11:42:22

标签: php mysql hash passwords

我正在寻找一种加密数据库密码的方法。

我在这里找到了一个与我类似的问题: How do I create and store md5 passwords in mysql

但我不知道盐是什么?我是否需要在用户和密码列旁边的表格中添加,我应该提供哪种数据类型?

$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important.
$escapedPW = mysql_real_escape_string($_POST['password']);

# generate a random salt to use for this account
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));

$saltedPW =  $escapedPW . $salt;
$hashedPW = hash('sha256', $saltedPW);

$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); ";

1 个答案:

答案 0 :(得分:0)

  

但我不知道盐是什么?

The primary function of salts is to defend against dictionary attacks versus a list of password hashes and against pre-computed rainbow table attacks.

  

我是否需要在用户和密码列旁边的表格中添加

是的,它应该保存在users表中。 因为检查密码,例如在登录时,您需要使用相同的算法从表单输入加密类型密码,并使用存储在数据库中的salt存储:

$typedPW = mysql_real_escape_string($_POST['password']); // from form input
$saltedPW =  $typedPW . $salt;  // $salt from db
$typedHashedPW = hash('sha256', $saltedPW); // compare it with db "password" value

并将此计算字符串与db中的password字段(来自您的代码)中存储的字符串进行比较。

  

我应该给它什么数据类型

这是一个普通的字符串