使用MySQL的密码函数来散列应用程序使用的密码是否被认为是好的或不好的做法?我可以看到优点和缺点。我很好奇,究竟是好还是坏,是否有共识。MySQL密码函数
回答
为MySQL的PASSWORD()功能状态的文档:
密码()函数是用来通过在MySQL服务器的认证系统;你不应该在你自己的应用程序中使用它。
阅读“You're Probably Storing Passwords Incorrectly”以获得有关散列和存储密码的更好建议。
MD5和SHA-1被认为太弱而无法用于密码。目前的建议是使用SHA-256。
我向MySQL提供了一个补丁来支持SHA2()
函数,并且该补丁已被接受,但是由于他们的路线图已经发生变化,所以尚不清楚它何时会将其发布到发布的产品中。
在此期间,您可以使用散列和程序语言的盐析,并简单地将结果存储哈希数据库中的消化。如果您使用PHP,则可在hash()
函数中使用SHA-256。
更新: MySQL 5.5.8于2010年12月发布,该版本包含对SHA2()
函数的支持。
如果您使用的是数据库函数的定义来散列密码,那么他们必须在散列的数据库到达:因此,我要喜欢做它更接近“源”,即在前端应用程序,你不及格围绕暴露的信息。
+1 salting和散列帐户密码是一个应用程序问题,而不是您想要依赖于DBMS的特定实现。 – bobince 2009-11-17 19:30:59
单词,这不是你想用的东西。看看OLD_PASSWORD和MySQL改变哈希方法时发生的PITA。在应用程序中做得更好,imo。 – jeffcook2150 2009-11-17 20:16:47
我相信在MySQL实际PASSWORD
功能是不安全的,并已被打破,但我找不到此刻的链接。我知道年龄较大(5岁以上的OLD_PASSWORD
)绝对不安全。
当然,所有的密码都应该始终用盐存储(为了进一步隐藏)。例如:
UPDATE users SET password=MD5(CONCAT('salt', 'user provided value')) WHERE id=54
也有MD5
功能,但与巨大的彩虹表的兴起,它不是100%可靠的,完全混淆存储的密码的方式。
一个更好的方法是在密码到达数据库之前对它进行散列(用盐)。例如:
<?php
$password = sha1(SALT.$_POST["password"]);
$sql = "UPDATE users SET password='".$password."' WHERE id=54";
?>
查看password.c的代码,MySQL 4.1+密码仅通过将SHA1应用于输入两次(无盐)而编码,并转换为十六进制字符串。 – 2009-11-17 19:56:39
正常的散列不应该用于密码存储(它仍然比纯文本好很多),您应该使用bcrypt或其他密钥派生函数,而这种函数对蛮力攻击的抵抗力要强大得多。 – 2015-10-15 13:06:10
我认为它应该sha1两次?参考:http:// stackoverflow。com/questions/17766978/mysql-password-function-to-php – zx1986 2016-06-22 06:02:46
- 1. 使用加密函数在mysql数据库中加密安全密码
- 2. Mysql函数编码
- 3. PHP内置或MySQL用户定义函数密码
- 4. 密码那么MySQL
- 5. MySql和PHPMyAdmin密码
- 6. 解密MySQL编码
- 7. mysql phpmyadmin数据库用户密码
- 8. MySQL数据库密码问题
- 9. mysql的密码()加密的密码到Oracle迁移
- 10. 等效密码哈希函数vb.net
- 11. Telerik Sitefinity密码散列函数
- 12. BASH - 函数来获取用户密码
- 13. Excel VBA的密码哈希函数
- 14. 哈希函数和保护密码
- 15. MySQL ENCRYPT密码但如何解密?
- 16. 在shell脚本上加密Mysql密码
- 17. 使用ColdFusion和MySQL密码加密
- 18. 使用php crypt或Mysql加密函数进行现场加密?
- 19. 无法更改MySQL密码
- 20. 安全MySQL根密码?
- 21. NHibernate的MySQL密码功能
- 22. UBUNTU中的mysql uroot密码
- 23. MySQL接受任何密码
- 24. mysql用户密码错误
- 25. 无法重置MySQL密码
- 26. mysql bash_profile密码被忽略
- 27. 更改root密码mysql
- 28. 更改密码PHP MySQL的
- 29. 恢复MySQL root密码
- 30. MySQL用户密码问题
这个帖子的任何更新,如果SHA2()仍然是最新的替代密码功能? Thx – Charlesliam 2015-04-01 06:16:29
@Charlesliam,检查bcrypt,scrypt或PBDKF2。 – 2015-04-01 06:55:18