以md5格式将密码插入数据库? [复制]
Posted
技术标签:
【中文标题】以md5格式将密码插入数据库? [复制]【英文标题】:insert password into database in md5 format? [duplicate] 【发布时间】:2013-03-04 07:16:23 【问题描述】:谁能告诉我或解释我如何将密码以 md5 格式插入数据库?即使你能指出我正确的方向或其他事情我会很感激,因为我只是 mysql 的新手谢谢。
$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 它,使用更好的功能或至少盐和 md5 1.不要使用 md5 存储密码 2. mysql_* 函数被分离 文档在这里很有用:php.net/manual/en/function.md5.php,还有dev.mysql.com/doc/refman/5.5/en/encryption-functions.html,但你应该不使用 md5。它已经不够强大了。至少 sha512 是首选,但请阅读下面链接的长答案。 教程w3schools.com/php/func_string_md5.asp 请谷歌查询 SQL 注入 【参考方案1】:使用MD5
,
$query="INSERT INTO ptb_users (id,
user_id,
first_name,
last_name,
email )
VALUES('NULL',
'NULL',
'".$firstname."',
'".$lastname."',
'".$email."',
MD5('".$password."')
)";
但MD5
不安全。使用SHA2
。
【讨论】:
我建议使用SHA512
,因为MD5
不安全...
两者都不适合密码哈希,但如果你确实使用这些,请使用盐。密码应使用 bcrypt 等专用算法进行哈希处理。【参考方案2】:
不要使用MD5
,因为它不安全。我建议使用SHA
或bcrypt
和salt
:
SHA256('".$password."')
http://en.wikipedia.org/wiki/Salt_(cryptography)
【讨论】:
@Downvoter - 想发表评论吗? 不是我的反对意见,但你真的不应该使用 sha256,你应该使用内置的password_hash()
和 password_verify()
函数。【参考方案3】:
如果你想使用 md5 加密,你可以在你的 php 脚本中进行
$pass = $_GET['pass'];
$newPass = md5($pass)
然后以这种方式将其插入数据库,但是 MD5 是一种单向加密方法,几乎不可能毫无困难地解密
【讨论】:
【参考方案4】:您可以在 mysql 中使用 MD5() 或在 php 中使用 md5()。要使用 salt,请在运行 md5 之前将其添加到密码中,例如:
$salt ='my_string';
$hash = md5($salt . $password);
最好为每个密码使用不同的盐。为此,您必须将盐保存在数据库中(以及哈希)。而身份验证用户将发送他的登录名并通过。你会在 db 中找到他的 hash 和 salt 并找出:
if ($hash == md5($salt . $_POST['password']))
【讨论】:
【参考方案5】:Darren Davies 说你应该使用盐是部分正确的 - 他声称 MD5 不安全存在几个问题。
您说过您必须使用 Md5 哈希插入密码,但这并没有真正告诉我们原因。是因为这是验证密码时使用的格式吗?您是否可以控制验证密码的代码?
使用 salt 的好处是它避免了 2 个用户具有相同密码的问题 - 他们也将具有相同的哈希值 - 这不是理想的结果。通过为每个密码使用不同的盐,就不会出现这种情况(对于大量数据,仍然存在由 2 个不同的密码引起冲突的风险 - 但我们现在将忽略这一点)。
因此,您可以为 salt 生成一个随机值并将其也存储在记录中,或者您可以使用您已经拥有的一些数据 - 例如用户名:
$query="INSERT INTO ptb_users (id,
user_id,
first_name,
last_name,
email )
VALUES('NULL',
'NULL',
'".$firstname."',
'".$lastname."',
'".$email."',
MD5('"$user_id.$password."')
)";
(我假设您已经在代码的前面正确地转义了所有这些字符串)
【讨论】:
以上是关于以md5格式将密码插入数据库? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
用Navicat for MySQL向l数据库插入一条用户信息,密码加密怎么加。