加密数据库中的密码


Encrypt the password in the database

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

我在这里发现了一个与我相似的问题:如何在mysql 中创建和存储md5密码

但我不知道盐是什么?我需要在表中的用户和密码列旁边添加吗?我应该给它什么数据类型?

$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'); ";

但我不知道盐是什么?

salts的主要功能是抵御字典攻击、密码哈希列表攻击和预先计算的彩虹表攻击。

我需要在我的表中添加用户和密码列吗

是的,它应该保存在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

并将这个计算的字符串与数据库中password字段(来自代码)中存储的字符串进行比较。

我应该给它什么数据类型的

它是一个普通字符串