미채택 완료

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

2020-10-01 (목) 21:29:12 2,802

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

2020-10-02 (금) 13:42:56

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

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

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

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

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