mysql8 이상일때 old_password 대응방법

mysql8 이상일때 old_password 대응방법

QA

mysql8 이상일때 old_password 대응방법

답변 1

본문

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

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

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

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

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 7
© SIRSOFT
현재 페이지 제일 처음으로