테스트 사이트 - 개발 중인 베타 버전입니다

암호화된 비밀번호가 가끔씩 안되는 경우가 있어요. 채택완료

물알갱이 5년 전 조회 2,616

비밀번호를 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개

hex2bin2함수를 따로 만드신게 아니라면 hex2bin2 => hex2bin 오타신것 같습니다.

수정후 정상작동은 합니다.

</p>

<p><?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));

}</p>

<p>function pw_match_check($password, $password_stored)

{

    $stored_seed = substr(bin2hex(base64_decode($password_stored)),40,8);</p>

<p>    $hash = base64_encode(hex2bin(sha1($stored_seed.$password).$stored_seed));</p>

<p>    if ( $hash === $password_stored)

    {

        return TRUE;

    }

    else

    {

        return FALSE;

    }

}</p>

<p>echo $password_stored = pw_encrypt('password!');

echo '
'.PHP_EOL;</p>

<p>var_dump(pw_match_check('password', $password_stored));</p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

5년 전

그게 문제가 아니고 sha1을 쓰는게 문제인거 같은데요...?

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인