我正在为我当前的项目使用Code Igniter。
截至目前,我正在使用 MD5 进行密码哈希,但我已经在很多地方阅读过,这样做并不是一个好习惯。
我该怎么办?
此外,如果建议使用 bcrypt ,那么如何将其与Code Igniter一起使用?
我已将这些文件放在application/libraries
在我的控制器中,我正在使用此代码 -
$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
现在使用 SimpleLoginSecure 删除了PasswordHash.php
。
答案 0 :(得分:16)
使用bcrypt。在我的回答评论中,here进行了讨论。您可以使用phppass等库来真正简化密码加密。
关于盐问题。用它!否则,有人可以直接转到this site并下载彩虹表,这些表将涵盖普通用户选择的绝大多数密码。特别是在过去几个月的所有安全漏洞中,现在不是时候说你不会使用像随机盐一样简单的实现。
<强>更新强>
要将PHPPass与CI配合使用,请从上面链接的phppass网站下载并解压缩文件。将PasswordHash.php文件放入CI应用程序/库目录。
在您的代码中,您可以通过以下方式加载库:$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
语句。
答案 1 :(得分:5)
为什么在sha1()
使用md5()
时使用{{1}}?
同样腌制密码总是一个好主意,因为它有效消除了Rainbow Table攻击的威胁
根据我的经验,对于99%的Web应用程序情况,salted SHA1哈希是非常安全的。
答案 2 :(得分:3)
自提出此问题以来,代码点火器已发生变化。但是为了一些可能没有遇到CI的大量文档或者之前没有看到过这种情况的人的利益,CI有一个加密类,它使用Mcrypt PHP库提供双向数据加密。
使用以下方法初始化课程后
$this->load->library('encrypt');
您可以按如下方式加密:
$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);
并解密如下:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
CI还具有不可解码的单向散列:
$hash = $this->encrypt->sha1('Some string');
有关更多信息,请参阅: http://www.codeigniter.com/user_guide/libraries/encryption.html