mysql8 이상일때 old_password 대응방법

mysql8 이상일때 old_password 대응방법

QA

mysql8 이상일때 old_password 대응방법

본문

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

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

답변을 작성하시기 전에 로그인 해주세요.
전체 6
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT