Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter 密码salt和PBKDF2_Codeigniter_Passwords_Codeigniter 2_Pbkdf2 - Fatal编程技术网

Codeigniter 密码salt和PBKDF2

Codeigniter 密码salt和PBKDF2,codeigniter,passwords,codeigniter-2,pbkdf2,Codeigniter,Passwords,Codeigniter 2,Pbkdf2,我正在研究关于在数据库中存储密码的不同解决方案。读了很多书之后,我想我最终会得到PBKDF2 尽管对于是否应该将salt输入PBKDF2函数并将salt存储在一列中,而将PBKDF2的密码存储在另一列中,我有点困惑 我还使用了CodeIgniter并找到了一个PBKDF2()库,它声称我不需要单独存储盐 使用$pbkdf2['hash']作为用户密码注册用户,该密码具有 被推荐;不需要单独储存用户的盐 因此,如果我假设正确,我所需要的就是向函数提供密码,函数会处理其余的事情。我是的创建者。刚刚

我正在研究关于在数据库中存储密码的不同解决方案。读了很多书之后,我想我最终会得到PBKDF2

尽管对于是否应该将salt输入PBKDF2函数并将salt存储在一列中,而将PBKDF2的密码存储在另一列中,我有点困惑

我还使用了CodeIgniter并找到了一个PBKDF2()库,它声称我不需要单独存储盐

使用
$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']作为用户密码存储到用户表中