只是想知道密码加密的方法是否有利有弊...通常情况下,在将新用户插入数据库之前,我会使用php并使用md5加密密码。我最近继承了一个项目,他们在sql插入查询中使用PASSWORD()来加密它。所以,现在我想知道使用一个优于另一个是否有优势?
答案 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)
答案 4 :(得分:0)
如果您知道其哈希值(PASSWORD()将为密码返回的值),请避免指定明文密码,请指定以关键字PASSWORD开头的哈希值:
CREATE USER 'jeffrey'@'localhost'
IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';
答案 5 :(得分:-3)
根据维基:
1996年,flaw was found设计了MD5。