【问题标题】:PHP - What to use for database encryption if not MD5? [duplicate]PHP - 如果不是 MD5,如何用于数据库加密? [复制]
【发布时间】:2013-12-09 12:12:29
【问题描述】:

好的,我不知道以前是否有人问过这个问题,但是有很多消息来源表明不建议使用 MD5 对敏感数据(例如密码)进行散列处理。但是没有人对他们将使用什么其他散列函数给出任何建议或指示。你所看到的,包括在这个网站上的,都是人们大喊大叫,第四,它是安全的还是不安全的。

众所周知,维基百科说:

“在 1996 年,MD5 的设计中发现了一个缺陷。虽然它不是 显然是致命的弱点,密码学家开始推荐使用 其他算法,例如 SHA-1,后来被发现是 也很脆弱。”

这是被那些告诉你不要使用 md5 或 sha1 的人引用的,但他们不想让其他人知道你应该考虑哪些其他替代方案。

当然,我们不要忘记,您设计应用程序的方式、存储密钥的位置、谁可以访问什么、使用盐等也非常重要。

当然要验证和验证所有数据,不要为 SQL 注入留下任何后门,XSS 漏洞是关键。但据我所知,md5 很容易被“蛮力”或“脱盐”。我不是安全专家,这就是我问的原因,所以我和任何像我一样有经验的人都可以用更简单的术语来理解。

这就是我目前正在做的事情,但也许有人可以给我利弊:

$hash = hash('sha256', $salt . hash('sha256', $_POST['pass']) );

我希望我的问题没有出格,我知道有很多关于此的文章和页面,但我只是没有找到任何答案,我相信其他人也想知道。

【问题讨论】:

  • 每当你将散列描述为加密时,一只无辜的小兔子就会死去。
  • 我的第一个想法是 sha 256 / sha 512 / etc.. 还要考虑动态盐(例如用户名的子字符串或其他东西)。这样每个人的盐就不同了。

标签: php encryption hash md5 sha


【解决方案1】:

从 PHP 5.5 开始你可以使用password_hash:

/**
 * In this case, we want to increase the default cost for BCRYPT to 12.
 * Note that we also switched to BCRYPT, which will always be 60 characters.
 */
$options = [
    'cost' => 12,
];

echo password_hash("Stack Overflow", PASSWORD_BCRYPT, $options)."\n";

【讨论】:

  • 如果您运行的是旧版本的 PHP,请获取兼容函数:github.com/ircmaxell/password_compat。无论哪种方式,都不要再尝试自己解决这个问题,而是实施现有的最佳实践!
  • 我之前的版本,直接用crypt就行了:php.net/manual/en/function.crypt.phppassword_hash只是底层crypt函数的封装)
  • @troelskn 这有点烦人,因为你需要自己处理盐。 password_compat 绝对更容易使用。
【解决方案2】:

我已经用过几次了。我的许多朋友都使用它,正如我所说的,因为它有一些好东西并且有很好的解释 Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 2011-07-14
    • 2011-10-24
    • 2018-03-28
    • 2012-09-21
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多