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비트인지 저장이 어떻게 되었는지 

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

답변을 작성하시기 전에 로그인 해주세요.
전체 3
© SIRSOFT
현재 페이지 제일 처음으로