Php 用于登录的Codeigniter和哈希密码?
我正在制作一个登录页面,我需要帮助使用CodeIgniter访问数据库中的hashpassword 我的hashPassword函数是:Php 用于登录的Codeigniter和哈希密码?,php,function,codeigniter,passwords,Php,Function,Codeigniter,Passwords,我正在制作一个登录页面,我需要帮助使用CodeIgniter访问数据库中的hashpassword 我的hashPassword函数是: function hashPassword($pass, $passKey){ $key = base64_decode($passwordKey); return base64_encode(hash_hmac( 'sha256', $key . mb_convert_encoding($password,
function hashPassword($pass, $passKey){
$key = base64_decode($passwordKey);
return base64_encode(hash_hmac(
'sha256',
$key . mb_convert_encoding($password, 'UTF-16LE', 'ASCII'),
$key, true));
}
我必须做到以下几点:
用户名
my\u aspnet\u会员身份中提取password
和passwordKey
password
是否等于hashPassword(,passwordKey)
以了解输入的密码是否有效Class Password extends CI_Model{
function getPassword($password, $passwordKey){
$this -> db -> select ('userId, Password, PasswordKey');
$this -> db -> from ('my_aspnet_Membership');
$this -> db -> where ('Password = '. "'" . $password . "'");
$this -> db -> where ('PasswordKey = '. "'" . $passwordKey . "'");
$q = $this -> db -> get();
if ($q -> num_rows() == 1){
return $q ->result();}else{
return false;
}
}
}
和
Class User extends CI_Model{
function getUser($id){
$this -> db -> select('id, name ');
$this -> db -> from('my_aspnet_Users');
$this -> db -> where('id = '. "'". $id . "'");
$this -> db -> limit(1);
$query = $this -> db -> get();
if($query -> num_rows() == 1){
return $query->result();
}
else{
return false;
}
}
}
我只是不知道如何让它们一起工作来执行密码检查。只需重复使用相同的功能(顺便说一句,这太复杂了)。因此,如果我创建一个帐户时,您在存储之前对我的密码运行functionX(),只需对登录时输入的密码运行functionX(),然后查看数据库中输入的用户名是否存在
编辑:我认为您这里的主要问题是需要一个用户名/电子邮件字段来确认用户与输入的密码相同。尽管重复使用相同的函数(顺便说一句,这太复杂了),上述方法仍然适用。因此,如果我创建一个帐户时,您在存储之前对我的密码运行functionX(),只需对登录时输入的密码运行functionX(),然后查看数据库中输入的用户名是否存在
编辑:我认为您这里的主要问题是需要一个用户名/电子邮件字段来确认用户与输入的密码相同。以上内容仍然适用,但首先,请对您的设计发表几点意见
- 您不需要两个表——一个用于用户,一个用于成员。您只需要一个带有列的用户表来存储密码散列
- SHA256是一个通用哈希函数。改用
class User extends CI_Model
function getHash($password) {
/* Code to get hash */
return $passwordHash;
}
function validateUser($username, $password) {
$passwordHash = $this->getHash($password);
/* Query MySQL
select * from user
where
username = $username and
password_hash = $passwordHash
*/
if num_rows > 1
return true
else
return false
}
}
如果您没有用户名选项,请在查询中使用用户id/用户电子邮件(唯一标识用户的任何内容)
希望这能为您澄清。首先,对您的设计发表几点意见
- 您不需要两个表——一个用于用户,一个用于成员。您只需要一个带有列的用户表来存储密码散列
- SHA256是一个通用哈希函数。改用
class User extends CI_Model
function getHash($password) {
/* Code to get hash */
return $passwordHash;
}
function validateUser($username, $password) {
$passwordHash = $this->getHash($password);
/* Query MySQL
select * from user
where
username = $username and
password_hash = $passwordHash
*/
if num_rows > 1
return true
else
return false
}
}
如果您没有用户名选项,请在查询中使用用户id/用户电子邮件(唯一标识用户的任何内容)
希望这能为您澄清。CodeIgniter使用一个名为“Tank Auth”的库: 它包括类“PasswordHash.php”: 示例代码:
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";
}
CodeIgniter使用一个名为“Tank Auth”的库: 它包括类“PasswordHash.php”: 示例代码:
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";
}