나는 mysql DB를 사용하여 사용자 테이블에 저장된 해시 및 소금에 대해 배우려고 노력하고 있습니다. 나는 그들을 저장하는 것으로 끝났지 만 사용자가 로그인 할 때 유효성을 검사하는 방법에 대해 머리를 감싸는 것처럼 보일 수는 없습니다.
소금과 해시를 별도로 저장하는 방법을 살펴 보았습니다. 제가 생산하는 소금은 무작위입니다.임의의 소금으로 암호 확인
아이디어가 있으십니까?
코드를 게시했습니다.
<?php
$password = 'passwordwhatever';
//generate the salt
function gen_salt() {
$salt = uniqid(mt_rand(), true) . sha1(uniqid(mt_rand(), true));
$salt = crypt('sha512', $salt);
return $salt;
}
//generate the hash
function gen_hash($salt, $password) {
$hash = $salt . $password;
for($i = 0; $i < 100000; $i++) {
$hash = crypt('sha512', $hash);
}
$hash = $salt . $hash;
return $hash;
}
$password = gen_hash(gen_salt(), $password);
echo $password;
?>
소금 생성은 덜 잔인한 방식으로 이루어질 수 있습니다. 단지'uniqid (mt_rand(), true)'는 그 목적을 위해 충분하고'sha512'를 추가하면 더 무작위 화하지 않을 것입니다 ;-) –