제목 | 패스워드 체크 프로그램 | ||
---|---|---|---|
글쓴이 | letsgolee | 작성시각 | 2013/09/27 22:16:59 |
|
|||
인터넷을 보다가 패스워드 관련된 좋은 글을 보고 그걸 조금 수정해서 해쉬화 하고 체크하는 프로그램을 만들어 보았습니다. 일단 소스: function hash_password($password, $algorithm = 'whirlpool', $salt_length = 16) { $salt = substr(hash($algorithm, uniqid(md5(rand()), true)), 0, $salt_length); $hash = hash($algorithm, $salt . $password); $pos = strlen($password) >= strlen($hash) ? strlen($hash) : strlen($password); return substr($hash, 0, $pos) . $salt . substr($hash, $pos); } function verify_password($check_pass, $pass_hash, $algorithm = 'whirlpool', $salt_length = 16) { $pos = (strlen($check_pass) >= strlen($pass_hash) - $salt_length) ? strlen($pass_hash) - $salt_length : strlen($check_pass); $salt = substr($pass_hash, $pos, $salt_length); $hash = hash($algorithm, $salt . $check_pass); return $pass_hash == substr($hash, 0, $pos) . $salt . substr($hash, $pos); }소스를 보면 hash_password()는 패스워드를 해쉬화 하되 솔트를 랜덤으로 생성해서 해쉬 스트링 중 패스워드 길이 뒤쪽에 추가하는 방식입니다. echo hash_password('password')를 실행하면 정해진 알고리듬으로 해쉬를 생성합니다. 예에서는 알고리듬을 정하지 않았으므로 whirlpool방식으로 해쉬가 생성되는데 소스를 보면 솔트가 자동생성되기 때문에 생성되는 해쉬는 매 순간마다 같지 않습니다. 따라서 해쉬만 가지고 패스워드를 찾아낼 수 있는 md5에서 처럼 rainbow attack을 피할 수 있습니다. 해쉬가 매 순간마다 바뀌기 때문에 패스워드를 확인하기 위해서는 verify_password를 이용하면 됩니다. |
|||
다음글 | editplus용 sublime text(Soda Li... (7) | ||
이전글 | CodeIgniter quick reference ch... (2) | ||
한대승(불의회상)
/
2013/09/30 17:17:20 /
추천
0
|
포루시아
/
2015/04/15 18:19:12 /
추천
0
오호 신기하네요 써봐야겟습니다.
|
잘 쓰도록 하겠습니다.