암호화된 비밀번호가 가끔씩 안되는 경우가 있어요.
본문
비밀번호를 pw_encrypt() 함수를 사용해서 암호화를 하고 있는데
가끔씩 pw_match_check() 함수를 이용해서 비밀번호가 일치하는지 체크하는데 안되는 경우가 발생하네요.
어떤 점을 체크해 봐야 할까요?
function pw_encrypt($password)
{
for ( $i = 1; $i <= 8; $i++ )
{
$seed .= substr('0123456789abcdefghijklmnopqrstuvwxyz@#$%^&*', rand(0,15), 1);
}
return base64_encode(hex2bin2(sha1($seed.$password).$seed));
}
function pw_match_check($password, $password_stored)
{
$stored_seed = substr(bin2hex(base64_decode($password_stored)),40,8);
if (base64_encode(hex2bin2(sha1($stored_seed.$password).$stored_seed)) == $password_stored)
{
return TRUE;
}
else
{
return FALSE;
}
}
답변 2
그게 문제가 아니고 sha1을 쓰는게 문제인거 같은데요...?
hex2bin2함수를 따로 만드신게 아니라면 hex2bin2 => hex2bin 오타신것 같습니다.
수정후 정상작동은 합니다.
<?php
function pw_encrypt($password)
{
$seed = '';
for ( $i = 1; $i <= 8; $i++ )
{
$seed .= substr('0123456789abcdefghijklmnopqrstuvwxyz@#$%^&*', rand(0,15), 1);
}
return base64_encode(hex2bin(sha1($seed.$password).$seed));
}
function pw_match_check($password, $password_stored)
{
$stored_seed = substr(bin2hex(base64_decode($password_stored)),40,8);
$hash = base64_encode(hex2bin(sha1($stored_seed.$password).$stored_seed));
if ( $hash === $password_stored)
{
return TRUE;
}
else
{
return FALSE;
}
}
echo $password_stored = pw_encrypt('password!');
echo '<br>'.PHP_EOL;
var_dump(pw_match_check('password', $password_stored));