【问题标题】:Codeigniter: Is encrypting a password like this secure?Codeigniter:像这样加密密码安全吗?
【发布时间】:2013-02-04 17:19:19
【问题描述】:

我想知道是否有人可以给我一些建议?我想知道使用 Codeigniter 加密密码的以下代码有多安全/不安全或其他垃圾?

$safe_password = sha1($password, $config['encryption_key'])

如果不安全,人们可以给我一些提示,以使其使用 Codeigniter 更安全吗?

非常感谢:)

【问题讨论】:

  • 因为 sha1 函数返回的时间更长,因此哈希值更安全。同样,hash() 没有加密密钥,因此在不同的域上会有相同的哈希密钥。
  • 如果你不是特别避免像 Ion Auth 这样的模块,为什么不使用类似的东西呢?
  • PHP 文档中有关散列密码的更多信息:php.net/manual/en/faq.passwords.php#faq.passwords.fasthash
  • Secure hash and salt for PHP passwords 的可能重复项 - 因为其他人都在发布通用(即非 codeigniter)答案。

标签: php security codeigniter


【解决方案1】:

众所周知,sha1 容易受到碰撞攻击,请尝试使用 bcrypt,因为它是最好的之一。如果 bcrypt 对您不起作用,请使用 sha512 并添加盐。
bcrypt 使用起来可能会让人望而生畏,但这里有一篇关于为什么要使用它的文章:http://phpmaster.com/why-you-should-use-bcrypt-to-hash-stored-passwords/

sha1 不安全的原因是因为碰撞攻击,这里是其中暴露 sha1 安全风险的论文之一:http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html

如果您想使用 sha512,您只需:

hash('sha512', $password.$salt);

并确保您始终使用盐,否则有人可以使用彩虹表(数据库)来查看您的哈希是否与数据库中的通用密码匹配。

【讨论】:

【解决方案2】:

sha1 和 md5 等哈希算法不适用于密码存储。它们的设计非常高效。这意味着暴力破解非常快。即使黑客获得了您散列密码的副本,暴力破解也很快。如果您使用盐,它会使彩虹表的效果降低,但对蛮力没有任何作用。使用较慢的算法会使蛮力无效。例如,bcrypt 算法可以随心所欲地变慢,并且它在内部使用盐来防止彩虹表。如果我是你,我会采用这种方法或类似方法。

【讨论】:

    【解决方案3】:

    来自 PHP 文档

    字符串 sha1 ( 字符串 $str [, bool $raw_output = false ] ) 如果可选的 raw_output 设置为 TRUE,则改为以长度为 20 的原始二进制格式返回 sha1 摘要,否则返回值为 40 个字符的十六进制数。

    我的建议使用BCRYPT 更安全,易于实施,您可以尝试password_compat

    例子

    $hash = password_hash($password, PASSWORD_BCRYPT);
    

    【讨论】:

      【解决方案4】:

      不,sha1() 不被认为是安全的,可以读取,例如,这里: http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

      目前,一个不错的选择可能是使用盐的 SHA512:hash('sha512', 'text+salt')

      【讨论】:

        【解决方案5】:

        更好的解决方案是使用 bcrypt,看看这个tutorial

        这是一个可以与 Codeigniter 一起使用的小型库https://github.com/waldirbertazzijr/codeigniter-bcrypt

        另一个相关的question

        【讨论】:

          猜你喜欢
          • 2014-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-05
          相关资源
          最近更新 更多