【问题标题】:Double Hashing Using MD5 with SHA-1使用带有 SHA-1 的 MD5 进行双重散列
【发布时间】:2014-03-28 15:00:46
【问题描述】:

以下代码创建一个MD5 哈希,然后使用SHA-1 再次对其进行哈希处理——这样安全吗?

$user = $_POST['username'];
$username = mysqli_real_escape_string($mysqli, $user);
$pass = md5($_POST['password']);
$password = sha1($pass);

这会增加碰撞的可能性吗?
还有其他方法可以散列并快速处理密码吗?

【问题讨论】:

  • 不,这不安全。阅读:stackoverflow.com/questions/401656/…
  • “非常快”是非常不可取的。你要慢。 “非常快”只会帮助那些试图通过暴力破解散列密码的人。

标签: php mysql sql hash


【解决方案1】:

与单一散列相比没有实际优势。

请注意,现在认为 MD5 已损坏,因为它容易受到许多实际攻击,并且不建议将 SHA1 等算法用于密码散列。

有专门为密码散列设计的算法,例如 PBKDF2。您应该使用 PBKDF2 作为您的哈希 - 请参阅 this question on security.stackexchange.com.

【讨论】:

  • 是的,这些算法(MD5 和 SHA*)对于散列密码来说太快了。 PHP 已经内置了对 BCrypt 的支持,看看函数password_hash()
【解决方案2】:

使用 sha2 https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_sha2

mysql> SELECT SHA2('abc', 224);

SHA2() 可以被认为在密码学上比 MD5() 更安全,或者 SHA1()。

SHA2() 在 MySQL 5.5.5 中添加。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 2012-04-19
    • 2011-05-18
    • 2011-06-28
    • 2011-05-30
    • 2012-04-10
    • 1970-01-01
    • 2017-10-12
    • 2014-11-18
    相关资源
    最近更新 更多