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비트인지 저장이 어떻게 되었는지
확인을 먼저하신수 적용하시길 권장드립니다.