Codeigniter 密码salt和PBKDF2
我正在研究关于在数据库中存储密码的不同解决方案。读了很多书之后,我想我最终会得到PBKDF2 尽管对于是否应该将salt输入PBKDF2函数并将salt存储在一列中,而将PBKDF2的密码存储在另一列中,我有点困惑 我还使用了CodeIgniter并找到了一个PBKDF2()库,它声称我不需要单独存储盐 使用Codeigniter 密码salt和PBKDF2,codeigniter,passwords,codeigniter-2,pbkdf2,Codeigniter,Passwords,Codeigniter 2,Pbkdf2,我正在研究关于在数据库中存储密码的不同解决方案。读了很多书之后,我想我最终会得到PBKDF2 尽管对于是否应该将salt输入PBKDF2函数并将salt存储在一列中,而将PBKDF2的密码存储在另一列中,我有点困惑 我还使用了CodeIgniter并找到了一个PBKDF2()库,它声称我不需要单独存储盐 使用$pbkdf2['hash']作为用户密码注册用户,该密码具有 被推荐;不需要单独储存用户的盐 因此,如果我假设正确,我所需要的就是向函数提供密码,函数会处理其余的事情。我是的创建者。刚刚
$pbkdf2['hash']
作为用户密码注册用户,该密码具有
被推荐;不需要单独储存用户的盐
因此,如果我假设正确,我所需要的就是向函数提供密码,函数会处理其余的事情。我是的创建者。刚刚发现这个话题,我决定澄清一下这个库是如何工作的 以下是文档中的示例代码:
#将pbkdf2库加载到控制器中
$this->load->library('pbkdf2');
#获取已通过POST方法发送的密码
$password=$this->input->post('password');
#使用随机生成的salt加密给定密码
$pbkdf2=$this->pbkdf2->encrypt($password);
encrypt()
方法,该方法有3个密钥:salt
,password
,hash
。
hash
的值是salt
和password
的串联
此功能允许用户选择如何使用此库,是使用salt和密码还是哈希(salt+密码)
encrypt()
方法的语法:
encrypt(字符串$password[,混合$good\u hash=NULL[,bool$object\u output=FALSE])
该函数使用给定的$good\u散列
生成加密的密码。如果未给出$good\u hash
参数,它将使用随机生成的salt
因此,如果单独存储了salt
,则可以将其作为第二个参数传递给函数,以加密给定密码:
$pbkdf2=$this->pbkdf2->encrypt($password,$salt);
另一方面,如果已将salt
和password
的串联存储到数据库中,则也可以将其作为第二个参数传递给函数:
$pbkdf2=$this->pbkdf2->encrypt($password,$hash);
自动提取盐的功能
因此,您可以将salt和password的串联存储在一列()中,然后使用旧的存储密码对新的给定密码进行加密
综合
在下面,我将向您展示如何使用这个库来注册/登录用户,而不单独存储salt和密码
注册用户:
$this->load->library('pbkdf2');
$password=$this->input->post('password');
$pbkdf2=$this->pbkdf2->encrypt($password);
#将$pbkdf2['hash']作为用户密码存储到用户表中
登录用户:
$this->load->library('pbkdf2');
$username=$this->input->post('username',TRUE);
$password=$this->input->post('password');
#从数据库中获取存储的用户密码
$user\u password=$this->user\u model->get\u password\u by($username);
#检查用户是否存在
if($user\u密码)
{
#使用旧密码加密新的给定密码:
$pbkdf2=$this->pbkdf2->encrypt($password,$user\u password);
#检查新生成的密码是否与旧密码匹配
if($pbkdf2['hash']=$user\u password){
#登录用户。。。
}否则{
#显示错误。。。
}
}否则{
#显示错误。。。
}
我是的创建者。刚刚发现这个话题,我决定澄清一下这个库是如何工作的
以下是文档中的示例代码:
#将pbkdf2库加载到控制器中
$this->load->library('pbkdf2');
#获取已通过POST方法发送的密码
$password=$this->input->post('password');
#使用随机生成的salt加密给定密码
$pbkdf2=$this->pbkdf2->encrypt($password);
encrypt()
方法,该方法有3个密钥:salt
,password
,hash
。
hash
的值是salt
和password
的串联
此功能允许用户选择如何使用此库,是使用salt和密码还是哈希(salt+密码)
encrypt()
方法的语法:
encrypt(字符串$password[,混合$good\u hash=NULL[,bool$object\u output=FALSE])
该函数使用给定的$good\u散列
生成加密的密码。如果未给出$good\u hash
参数,它将使用随机生成的salt
因此,如果单独存储了salt
,则可以将其作为第二个参数传递给函数,以加密给定密码:
$pbkdf2=$this->pbkdf2->encrypt($password,$salt);
另一方面,如果已将salt
和password
的串联存储到数据库中,则也可以将其作为第二个参数传递给函数:
$pbkdf2=$this->pbkdf2->encrypt($password,$hash);
自动提取盐的功能
因此,您可以将salt和password的串联存储在一列()中,然后使用旧的存储密码对新的给定密码进行加密
综合
在下面,我将向您展示如何使用这个库来注册/登录用户,而不单独存储salt和密码
注册用户:
$this->load->library('pbkdf2');
$password=$this->input->post('password');
$pbkdf2=$this->pbkdf2->encrypt($password);
#将$pbkdf2['hash']作为用户密码存储到用户表中