我正在使用PHP和Mysql。我想知道如何使用MD5发送密码哈希,并希望在用户尝试登录时检查它。我试过了,但它无法正常工作。如果有人知道该怎么做,请提供代码。
答案 0 :(得分:5)
md5
不太适合这个目的。阅读this article以了解方法和原因,但简短版本是您应该使用bcrypt
。 Google快速显示PHPass声称支持bcrypt
。
更新:正如@ Dragontamer5788在评论中指出的那样,从理论角度来看,scrypt
甚至比bcrypt
更好。作者擅长加密,但请注意,此时它的审查次数较少,实际曝光次数少于bcrypt
。我可能仍然会选择它,但它并不像bcrypt
md5
那样干脆。
答案 1 :(得分:0)
//Register:
$the_magical_salt = "everybody_is_obsessed_with_these_days$3^^2)(%=-"; // Even_though_md5_shouldnt_be_used
mysql_query('insert into users values (NULL,'.$filtered_username.','.md5($password.$the_magical_salt).');');
//Login:
$res = mysql_query('select password from users where username = '.$filtered_username);
$res = mysql_fetch_array($res);
if(md5($_POST['password'].$the_magical_salt) == $res[0]) echo "Yeah, you're welcome.";
else echo "Wrong password sugar";
除了两次使用md5()函数之外,没有太多其他内容。
答案 2 :(得分:0)
如果没有更多信息,那将很难帮助你,但我相信你想要的是Digest Authentication。
以下是PHP文档中的示例(特别是示例#7):http://php.net/manual/en/features.http-auth.php
请注意,此类身份验证不能防止针对中间人攻击。例如,如果某人正在嗅探受害者网络上的流量,攻击者可以简单地使用消化的用户名/密码组合重播该请求,并且您的PHP脚本将很乐意将攻击者认证为受害者。