我正在为我当前的项目使用 Code Igniter。
截至目前,我正在使用 MD5 对于密码散列,但我在很多地方都读到过,这样做不是一个好习惯。
我应该带什么?
另外,如果 bcrypt 是推荐的,那么如何与 Code Igniter 一起使用呢?
编辑
我已将这些文件放在
application/libraries
中在我的 Controller 中,我正在使用此代码 -
$params = array(
'phpass_hash_strength' => 8,
'phpass_hash_portable' => FALSE
);
$this->load->library('PasswordHash', $params);
$password = $this->passwordhash->HashPassword($pwd);
我收到这些错误 -
A PHP Error was encountered
Severity: Notice
Message: Uninitialized string offset: 3
Filename: libraries/PasswordHash.php
Line Number: 116
A PHP Error was encountered
Severity: Warning
Message: strpos() [function.strpos]: Empty delimiter
Filename: libraries/PasswordHash.php
Line Number: 116
更新
已删除
PasswordHash.php
, 使用 SimpleLoginSecure 现在。
最佳答案
使用 bcrypt。这个讨论出现了here在对我的回答的评论中。您可以使用诸如 phppass 之类的库。真正简化密码加密。
关于盐的问题。使用它!否则有人可以简单地去this site并下载包含普通用户选择的绝大多数密码的彩虹表。特别是在过去几个月发生的所有安全漏洞的情况下,现在不是说你不会使用像随机盐这样简单的东西来实现的时候。
更新
要在 CI 中使用 PHPPass,请从上面链接的 phppass 网站下载并提取文件。将 PasswordHash.php 文件放入 CI application/libraries 目录。
在您的代码中,您然后通过以下方式加载库:$this->load->library('PasswordHash',array(8, FALSE));
然后散列密码就像 $this->PasswordHash->HashPassword($password);
一样简单
稍后检查密码是否正确,就像这样简单:
$password = $_POST['password'];
$actualPassword = /*Get the hashed password from your db*/;
$check = $this->PasswordHash->CheckPassword($password, $actualPassword);
我从 http://dev.myunv.com/articles/secure-passwords-with-phpass/ 中获取了这个演示这为您提供了更多信息。我稍微修改了该教程以使用 CI 的加载程序,这就是为什么您不需要
include
或 new
声明。
关于codeigniter - 使用 Codeigniter 存储密码的最安全方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044785/