【问题标题】:CodeIgniter Password Encryption And ValidationCodeIgniter 密码加密和验证
【发布时间】:2013-05-30 22:33:35
【问题描述】:

我正在使用 CodeIgniter,并正在创建用户需要登录的网站部分。我一直在阅读有关将密码存储为 MD5 哈希和使用盐的加密字符串的信息,但我没有看到任何关于解密的信息.

对密码尝试进行加密是否有效/安全,是否与在存储密码以检查验证时的加密方式相同?

这是在 php 应用程序中存储密码还是使用 CodeIgniter 框架的推荐方式?

【问题讨论】:

  • 旁注:看看已经为验证而制作的库。 stackoverflow.com/questions/346980/…
  • @Kyslik 如果您的评论是一个答案,我会接受它。谢谢!!
  • 当保存密码验证器时,仅使用哈希函数是不够的,并且仅添加盐对提高安全性无济于事。而是使用随机盐迭代 HMAC 约 100 毫秒的持续时间,然后将盐与哈希一起保存。使用PBKDF2Rfc2898DeriveBytespassword_hashBcryptpasslib.hash 等函数或类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。

标签: php codeigniter encryption passwords


【解决方案1】:

已经有 auth 库“准备就绪”(开箱即用的人可能会说),这里是另一个与此类似的问题的链接 http://www.stackoverflow.com/questions/346980/how-should-i-choose-an-authentication-library-for-codeigniter
注意我喜欢 Tank Auth 和“groups”。

【讨论】:

    【解决方案2】:

    CodeIgniter 使用一个名为“Tank Auth”的库:http://konyukhov.com/soft/tank_auth/ 它包括类“PasswordHash.php”:http://bit.ly/1gahwtT

    示例代码:

    require "PasswordHash.php";
    
    define("phpass_hash_portable",TRUE);
    define("phpass_hash_strength",8);
    
    $hasher = new PasswordHash(phpass_hash_strength,phpass_hash_portable);
    if ($hasher->CheckPassword($password_to_check, $original_encoded_password)) {
        echo "password correct";
    } else {
        echo "password incorrect";
    }
    

    【讨论】:

      【解决方案3】:

      您的答案中的两个 cmets 显示了指向好的答案的链接,以添加更多。如果您只是喜欢散列,您也可以使用 crypt。注意 crypt 不同于 mcrypt 曾经愚弄过我一次。可以在 laravel3 Hash class 上找到 crypt 的示例。或者您也可以使用php pass,这是一个利用 OpenBSD 风格的基于 Blowfish 的 bcrypt 的库。

      感谢 cryptic,ircmaxell 还有一个哈希库,看看here

      【讨论】:

      • 哦,是的,我不知道那个库,最好更新我的答案以包括那个@crypticツ
      • PHP 5.5 将包含对password_hash() 的本机支持,因此使用上述库使其已兼容,因此无需修改代码即可使用它,只需在升级时删除库即可,一切顺利。 =o)
      【解决方案4】:

      不要使用 md5 或 base64。 Sha1也坏了。最好使用 bcrypt。

      您可以将此library 与 codeigniter 一起使用来验证 bcrypt 密码

      【讨论】:

        【解决方案5】:

        密码以散列格式存储,因为在大多数情况下不需要将它们恢复为原始字符串。 md5 函数生成一个唯一的 32 个字母长的字符串,只需比较两个哈希值即可验证该字符串。回答你的问题:

        • 是的,这是保存密码的标准方式。

        • MD5 不再足够安全,因此大多数人开始使用 php hash

        当然是带有算法“sha512”和盐的函数。

        【讨论】:

        • 不要使用 MD5 或链接到 php 哈希函数它们不安全。 PHP 最好、最简单、最安全的方法是 password_hashpassword_verify 的组合。
        【解决方案6】:

        这个功能可以完全用在你身上..

        $this->load->library('encrypt');
        $this->encrypt->sha1($yaourpassword);
        

        【讨论】:

        • 这是一种非常糟糕的密码存储方式。 SHA1 和 MD5 一样坏,你也不用盐。您需要使用 Bcrypt 进行密码散列。 PHP 5.5 会原生支持它,否则使用github.com/ircmaxell/password_compat
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 2011-04-11
        • 2017-10-17
        • 2013-09-18
        相关资源
        最近更新 更多