패스워드
본문
그누4에서 db 백업해와 그누5.4에 붙여 넣고 g4_import.php 해서 잘 사용하고 있습니다.
회원들을 정상적으로 옮겨와 로그인도 잘되는데 옮겨온 회원들은 패스워드가 변경이 안되네요.
db를 보니 그누4에서 옮겨온 회원 패스는 *221342342342 이렇게 시작하고 그누5.4에서 회원 가입한 회원은 sha256으로 시작하더군요.
어떻하면 그누4의 패스를 그누5.4의 패스처럼 변경 할 수 있을까요?
아니면, 변경하지 않더라도 그누4에서 옮겨온 회원들의 패스를 변경할 수 있게 가능할까요?
답변 3
그누5.4인데 따라해도 안되네요. 오히려 로그인 자체가 안되요.
알려주신 사이트 1번만 적용하니 되네요.
1. 그누보드5 / lib / common.lib.php 155~1560줄
function sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select password('$value') as pass ");
return $row['pass'];
}
를 아래와 같이 내용 추가
// mysql 5.7 미만일때
/*function sql_old_password($value)
{
$row = sql_fetch(" select old_password('$value') as pass ");
return $row['pass'];
}*/
// mysql 5.7 이상일때
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);
}
function sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select password('$value') as pass ");
return $row[pass];
}