关于php:以md5格式将密码插入数据库?

insert password into database in md5 format?

本问题已经有最佳答案,请猛点这里访问。

有人能告诉我或解释我如何在MD5格式的数据库中插入密码吗?即使你能给我指明正确的方向,我也会感激的,因为我是MySQL的新手,谢谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$query="INSERT INTO ptb_users (id,
user_id,
first_name,
last_name,
email )
VALUES('NULL',
'NULL',
'"
.$firstname."',
'"
.$lastname."',
'"
.$email."',
'"
.$password."'
)"
;
mysql_query($query) or dieerr();
$result = mysql_query("UPDATE ptb_users SET ptb_users.user_id=ptb_users.id");


使用MD5

1
2
3
4
5
6
7
8
9
10
11
12
$query="INSERT INTO ptb_users (id,
user_id,
first_name,
last_name,
email )
VALUES('NULL',
'NULL',
'"
.$firstname."',
'"
.$lastname."',
'"
.$email."',
MD5('"
.$password."')
)"
;

但是MD5是不安全的。使用SHA2

  • 加密和压缩功能
  • SQLFiddle演示


不要使用MD5,因为它不安全。我建议将SHAbcryptsalt一起使用:

1
SHA256('".$password."')

http://en.wikipedia.org/wiki/salt_u(密码学)


达伦·戴维斯说你应该使用盐的说法部分是正确的——他声称MD5不安全有几个问题。

您说过必须使用MD5哈希插入密码,但这并不能告诉我们为什么。是因为这是验证密码时使用的格式吗?您是否可以控制验证密码的代码?

使用salt的好处在于它避免了两个用户拥有相同密码的问题——他们也有相同的哈希值——这不是一个理想的结果。如果对每个密码使用不同的salt,则不会出现这种情况(对于非常大的数据量,仍然存在两个不同的密码发生冲突的风险,但我们现在将忽略这一点)。

因此,您可以让她为salt生成一个随机值,并将其存储在记录中,也可以使用您已经保存的一些数据,例如用户名:

1
2
3
4
5
6
7
8
9
10
11
12
$query="INSERT INTO ptb_users (id,
        user_id,
        first_name,
        last_name,
        email )
        VALUES('NULL',
        'NULL',
        '"
.$firstname."',
        '"
.$lastname."',
        '"
.$email."',
        MD5('"
$user_id.$password."')
        )"
;

(我假设您已经在代码的前面正确地转义了所有这些字符串)


您可以在mysql中使用md5()或在php中使用md5()。要使用salt,请在运行md5之前将其添加到密码中,例如:

1
2
$salt ='my_string';
$hash = md5($salt . $password);

最好对每个密码使用不同的salt。为此,您必须将盐保存在db(以及哈希)中。身份验证时,用户将发送其登录名并通过。您将在数据库中找到他的哈希和盐,并发现:

1
if ($hash == md5($salt . $_POST['password'])) {}

如果您想使用MD5加密,可以在PHP脚本中使用它。

1
2
3
$pass = $_GET['pass'];

$newPass = md5($pass)

然后以这种方式将其插入数据库,但是MD5是一种单向加密方法,几乎不可能毫不费力地解密。