현재 로그인 시스템을 구현 중입니다. 암호와 소금을 데이터베이스에 저장하려고합니다. 이제는 hash()
과 crypt()
기능이 동일한 것으로 보이는 것으로 나타났습니다 (SHA512에서 유효).hash() 대 crypt() 함수 비교
hash()
은 신품이며 crypt()
보다 많은 해싱 알고리즘을 지원하는 것으로 보입니다. 아니면 내가 알아야 할 다른 차이점이 있습니까?
는 편집 :
function generatePasswordHash($password){
$salt = base64_encode(mcrypt_create_iv(8));
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
return $calculatedPasswordHash;
}
결과는 보이는 여기 $1$Qh6ByGJ9$zLn3yq62egvmc9D7SzA2u.
내 암호 검사 기능과 같은 :
function checkLoginData($username, $password){
global $db;
$sql = "SELECT * FROM users WHERE username = :username";
$result = $db->ExecuteQuery($sql, array("username"=>$username));
if(!empty($result)){
$result = $result[0];
$savedPasswordHash = $result['password'];
$splitted = explode("$", $savedPasswordHash);
$salt = $splitted[2];
$calculatedPasswordHash = crypt($password, '$1$' . $salt . '$');
if($savedPasswordHash === $calculatedPasswordHash){
return true;
}
}
return false;
}
@CodeInChaos : 데이터베이스에서 암호 해시를 저장하고 액세스합니다. 둘 다 소금을 사용할 수 있습니다 (연결을 통해'hash() '의'$ data' 매개 변수에 소금 추가). – testing
많은 경우 소금을 데이터에 연결하는 것이 안전하지 않습니다. 당신이하는 일을 정말로 알지 못한다면, 그렇게하지 마십시오. 그것은 또한 * 빠르며 * 당신은 * 천천히 그것을 원합니다. – CodesInChaos
새 코드는 암호 해시 대신 암호를 암호화합니다. 즉 그 가역적으로 가역적이다. – CodesInChaos