密码加密方法? :PASSWORD()与md5?

时间:2011-11-01 14:10:25

标签: php mysql password-encryption

只是想知道密码加密的方法是否有利有弊...通常情况下,在将新用户插入数据库之前,我会使用php并使用md5加密密码。我最近继承了一个项目,他们在sql插入查询中使用PASSWORD()来加密它。所以,现在我想知道使用一个优于另一个是否有优势?

6 个答案:

答案 0 :(得分:9)

请参阅the MySQL docs for PASSWORD

  

PASSWORD()函数由身份验证系统使用   MySQL服务器; 您不应在自己的应用程序中使用它。对于   为此,请考虑使用MD5()或SHA2()。另请参阅RFC 2195,   第2节(质询 - 响应认证机制(CRAM)),for   有关安全处理密码和身份验证的更多信息   在你的应用程序中。

下面的说明是不依赖该功能的一个很好的理由:

  

调用PASSWORD()的语句可能会记录在服务器中   日志或历史文件,如〜/ .mysql_history,这意味着   任何具有读取权限的人都可以读取明文密码   信息。

密码通常最好与盐渍哈希(SHA等)一起存储。这是an answer,其中列出了一些有关安全密码存储的有用链接。

答案 1 :(得分:2)

如果有人在嗅探数据包而你使用PASSWORD,他们就能看到“INSERT INTO USERS VALUES('username',PASSWORD('secret'))”。我认为MySQL也有一个MD5功能,但不应该出于同样的原因使用它。

SHA-1和MD5已被破坏,建议您使用带有salt值的SHA-256(可能基于用户名)。盐基本上是字符串加密到密码,以帮助防止使用彩虹表来找出密码。

答案 2 :(得分:2)

SHAx和MD5都不是加密,而是散列。

查看mcrypt库以获取实际加密。

http://php.net/manual/en/book.mcrypt.php

编辑:正如ircmaxell所指出的,密码不应该被加密(除非你正在构建一个密码管理器),而是使用随机盐值进行单向散列。 (例如:SHA1)

答案 3 :(得分:0)

如果您使用PHP而不是MySQL,PHP建议不要使用MD5来保护密码:

http://php.net/manual/en/function.md5.php

相反,请使用crypt功能:

http://php.net/manual/en/function.crypt.php

答案 4 :(得分:0)

如果您知道其哈希值(PASSWORD()将为密码返回的值),请避免指定明文密码,请指定以关键字PASSWORD开头的哈希值:

CREATE USER 'jeffrey'@'localhost'
IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';

答案 5 :(得分:-3)

根据维基:

  

1996年,flaw was found设计了MD5。