Это некоторые функции, которые я использую для шифрования паролей и проверки пароля. Было интересно, если это хороший способ справиться с этим. Я использую frameworkignign framework.Crypt() генерация соли и шифрование паролей, хорошо выполнены?
Это функция «шифровать»:
function crypt_pass($input){
$salt = substr(sha1(date('r')), rand(0, 17), 22);
$cost = 10;
$hash = '$2y$' . $cost . '$' . $salt;
$pw_and_salt['pw'] = crypt($input, "$hash");
$pw_and_salt['salt'] = $salt;
return $pw_and_salt;
}
хранить как пароль и соль в моей БД. Вот функция входа:
function login(){
$this->db->select('salt');
$salt = $this->db->get_where('users', array('username' => $this->input->post('username')))->row();
$where = array(
'username' => $this->input->post('username'),
'password' => crypt($this->input->post('password'), '$2y$10$' . $salt->salt),
);
$user = $this->db->get_where('users', $where)->first_row();
if (!$user) {
return FALSE;
}else{
if(!empty($user->activation)){
return 2;
}else if($user && empty($user->activation)){
$this->session->set_userdata('id',$user->id);
$this->session->set_userdata('username',$user->username);
$this->session->set_userdata('first_name',$user->first_name);
return 1;
}
}
}
Я реализую это правильно? Это достаточная безопасность?
версия 2: НЕ ХРАНЕНИЕ СОЛИ, ИЗВЛЕЧЕНИЕ ИЗ ПАРОЛЯ В БДЕ ВМЕСТО:
function login(){
$this->db->select('password');
$pw = $this->db->get_where('users', array('username' => $this->input->post('username')))->row();
$where = array(
'username' => $this->input->post('username'),
'password' => crypt($this->input->post('password'), $pw->password),
);
$user = $this->db->get_where('users', $where)->first_row();
if (!$user) {
return FALSE;
}else{
if(!empty($user->activation)){
return 2;
}else if($user && empty($user->activation)){
$this->session->set_userdata('id',$user->id);
$this->session->set_userdata('username',$user->username);
$this->session->set_userdata('first_name',$user->first_name);
return 1;
}
}
}
Я думаю, что этот вопрос будет лучше на стеке [code review] (http://codereview.stackexchange.com/). –
См. Также раздел [PHP-хеширование PHP] (http://www.openwall.com/phpass/) (PHPass). Он переносится и затвердевает от ряда распространенных атак на пароли пользователей. Парень, который написал фреймворк (SolarDesigner), тот же парень, который написал [John The Ripper] (http://www.openwall.com/john/) и сидит в качестве судьи в [HHH] (http: /password-hashing.net/). Поэтому он знает кое-что об атаках на пароли. – jww
Этот вопрос относится к другому сайту в сети Stack Exchange. Возможно, вам стоит попробовать [Code Review Stack Exchange] (http://codereview.stackexchange.com/). – jww