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

mysql8 이상일때 old_password 대응방법 채택완료

해피정 1년 전 조회 9,351

zeroboard 또는 그누보드4 의 old_password 를 사용해서 생성된 16bit 암호를

mysql 8 이상의 그누보드5에서 사용하기 위해 아래 코드를 적용하면 오류가 뜹니다. ㅠㅠ

 

아래 코드는 mysql 5.4 등에서 적용하는 함수인데요...

<?php

    // mysql 5.7 이상, mysql 8 미만일때
    function sql_old_password($value) {
        if ($value == '')
            return '';

        $nr = 1345345333;
        $add = 7;
        $nr2 = 0x12345671;
        foreach(str_split($value) as $c) {
            if ($c == ' ' or $c == "\t")
                continue;
            $tmp = ord($c);
            $nr ^= ((($nr & 63) + $add) * $tmp) + (($nr << 8) & 0xFFFFFFFF);
            $nr2 += (($nr2 << 8) & 0xFFFFFFFF) ^ $nr;
            $add += $tmp;
        }

        if ($nr2 > PHP_INT_MAX)
            $nr2 += PHP_INT_MAX + 1;

        $bit = (1 << 31) -1;

        return sprintf("%08lx%08lx", $nr & $bit, $nr2 & $bit);
    }

?>

 

ChatGPT 에게 물어보니 아래와 같이 함수를 만들어주는데, 그누보드5에 적용이 적합한걸까요?

<?php
function sql_caching_sha2_password($value) {
    if ($value == '') {
        return '';
    }

    // Salt 길이 설정
    $salt_length = 20;
    
    // Salt 생성
    $salt = random_bytes($salt_length);
    
    // SHA256 해시 생성
    $sha256_hash = hash('sha256', $value, true);
    
    // Salt와 SHA256 해시 결합
    $salted_hash = $salt . $sha256_hash;
    
    // 최종 해시 생성 (SHA256으로 한 번 더 해싱)
    $final_hash = '*' . strtoupper(hash('sha256', $salted_hash));
    
    return $final_hash;
}

?>

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

답변 1개

채택된 답변
+20 포인트
복스리
1년 전

이렇게 외부 함수를 별도로 사용하시는 것 보다 mysql내부 함수에 보시면 old_password가 있습니다.

그누보드4를 사용하셨다면 기존에 암호를 계속 이어서 사용하시길 원하신다면 mysq 내부의 old_password를 사용하시면 기존에 사용하셨던 password도 그대로 사용하실수 있습니다.

다만 mysql를 열어보셔서 기존에 저정되어있는 비밀번호가 8비트인지 16비트인지 저장이 어떻게 되었는지 

확인을 먼저하신수 적용하시길 권장드립니다.

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

답변에 대한 댓글 1개

해피정
1년 전
salt 길이를 32 로 변경하니 그누보드5 대응이 되더군요 ^^

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

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

로그인