3

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

4

6 回答 6

9

请参阅MySQL 文档PASSWORD

MySQL Server 中的身份验证系统使用 PASSWORD() 函数;你不应该在你自己的应用程序中使用它。为此,请考虑使用 MD5() 或 SHA2()。另请参阅 RFC 2195,第 2 节(挑战-响应身份验证机制 (CRAM)),了解有关在应用程序中安全处理密码和身份验证的更多信息。

在该注释下方是不依赖该功能的一个很好的理由:

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

密码通常最好使用加盐哈希(SHA 等)存储。这是一个答案,其中列出了一些有关安全密码存储的有用链接。

于 2011-11-01T14:12:18.770 回答
2

如果有人正在嗅探数据包并且您使用密码,他们将能够看到“插入用户值('用户名',密码('秘密'))”。我认为 MySQL 也有 MD5 函数,但出于同样的原因不应该使用它。

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

于 2011-11-01T14:17:11.503 回答
2

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

查看 mcrypt 库以进行实际加密。

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

编辑:正如 ircmaxell 所指出的,不应加密密码(除非您正在构建密码管理器),而应使用随机盐值进行单向哈希。(例如:SHA1)

于 2011-11-01T14:36:18.480 回答
0

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

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

相反,请使用以下crypt功能:

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

于 2011-11-01T14:18:18.353 回答
0

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

CREATE USER 'jeffrey'@'localhost'
IDENTIFIED BY PASSWORD '*90E462C37378CED12064BB3388827D2BA3A9B689';
于 2015-06-17T04:00:33.527 回答
-4

根据维基:

1996年,发现MD5的设计存在缺陷。

于 2011-11-01T14:13:02.123 回答