我正在使用PHP和Mysql。我想知道如何使用MD5发送密码散列,并希望在用户尝试登录时检查它。我尝试过,但无法正常工作。如果有人知道如何去做,请给我提供代码。如何在用户注册和登录系统中实现MD5散列?
回答
//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()函数两次以外,没有太多内容。
您应该使用并存储盐 - 一个随机数 - 以防止对密码进行离线哈希攻击。另外,MD5作为哈希机制还不够。它不会被像布鲁斯·施奈尔这样的人推荐(并且现在还没有被推荐多年)。 – 2010-07-22 02:40:17
+1,因为我使用了类似的错误密码。哦,愤怒的电子邮件 – 2010-07-22 02:44:24
@Robus - 如果你打算使用盐,它应该是加密唯一的每个用户,并将密码存储在数据库中,而不是在PHP代码中进行硬编码。 – 2010-07-22 02:52:19
md5
不太适合这个目的。阅读this article以了解最新情况,但简短版本是您应该使用bcrypt
来代替。 Google快速显示PHPass声称支持bcrypt
。
更新:由于@ Dragontamer5788在评论中指出,scrypt
甚至比理论上的bcrypt
更好。作者擅长加密技术,但请注意,此时的评论数量少于现实世界的曝光量,而不是bcrypt
。我可能仍会选择它,但它不像md5
上的bcrypt
。
PHP 5.3+支持BCrypt in它的“crypt”功能,而PHP 5.2及更早的版本可以通过PHP Suhosin Patch(它实现了BCrypt到PHP)。技术上说,“scrypt”比BCrypt更好,因为它存在内存约束和CPU约束。但是BCrypt是目前最广泛使用的密码功能,不妨直接使用它,直到好的scrypt实现存在为止,这个答案需要更多upvotes – Dragontamer5788 2010-12-01 20:38:36
没有更多的信息,这将是很难帮助你,但我相信你想要的是Digest Authentication。
下面是一个例子(实施例具体#7)从PHP文档:http://php.net/manual/en/features.http-auth.php
注意,此类型的认证不防止对人在中间人攻击。例如,如果某人正在嗅探受害者网络上的流量,则攻击者可以简单地使用消化的用户名/密码组合重新播放该请求,并且您的PHP脚本会高兴地将攻击者认证为受害者。
- 1. 登录和注册系统
- 2. 注册和登录系统
- 3. 如何实现Facebook登录和注册
- 4. 如何实现登录和注册?
- 5. PhP登录/注册系统
- 6. JDBC登录/注册系统
- 7. 登录注册在android系统
- 8. Rails3中的注册/登录系统
- 9. 如何使用django制作注册和登录系统?
- 10. 用户登录会话超时注销OOP登录/注册系统
- 11. PHP OOP登录/注册系统
- 12. PHP OOP登录/注册系统
- 13. Android Studio登录/注册系统构想
- 14. 用Javascript注册用户注册登录
- 15. 如何在Windows Phone 8中实现登录/注册流程
- 16. 如何在php和javascript下实现自动登录系统?
- 17. 批处理文件中的登录和注册系统
- 18. SWI-序言用户登录和注册
- 19. 实现登录/注册功能
- 20. 实施登录/注销系统
- 21. Django注册:如何防止登录的用户注册?
- 22. 如何在JSP中实现登录系统
- 23. 如何使用password_hash注册和登录
- 24. 注册和登录
- 25. 如何使用OAuth2实现第三方登录/注册?
- 26. 登录用户请参阅登录和注册页面(django注册)
- 27. 如何为drupal和其他CMS实现单一登录系统?
- 28. WordPress的登录和注册系统像http://www.damnlag.com/
- 29. Laravel用户登录系统
- 30. 如何在用户注册后发送用户登录凭证
首先,值得注意的是MD5不加密,它是一种散列或摘要算法。当你说“发送密码在md5中加密”你的意思是在用户的请求到服务器,或从你的PHP文件到MySQL? – 2010-07-22 02:38:42
Robus说得对,但如果你想保存Hazel,你可以使用这个PHP身份验证类http://www.phpclasses.org/package/6174-PHP-Manage-registrations-and-authenticate-users.html – Pablo 2010-07-22 02:39:36
它可能是我对挑选单词很挑剔,但你在哪里发送哈希密码?另外,如果你不使用盐,你应该。此外,您可能还想考虑更安全的哈希函数。 – Slartibartfast 2010-07-22 02:51:14