在数据库中加密密码

Encrypt the password in the database

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

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

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

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

but I didn't know what is the salt ?

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

do I need to added in my table beside user and password columns

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

$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 字段(来自您的代码)中的字符串进行比较。

what data type should I give it

是普通字符串