출처: http://www.zeroboard.com/4218905
http://cfs3.tistory.com/upload_control/download.blog?fhandle=YmxvZzc3MzM3QGZzMy50aXN0b3J5LmNvbTovYXR0YWNoLzAvNi5naWY=
5. 회원정보 이전시, 비밀번호가 맞지 않는 경우가 있습니다.
이건 마이그레이션 문제가 아니라 php 버젼의 차이입니다.
정확히 module/member/member_controller.php 의 마지만 함수가 문제입니다.
php5 이상은 처리가 되지만... php4 이하에서는 다른 결과를 보입니다.
몇시간동안 구글링해서 4버젼대에서 old password 알고리즘을 찾아냈습니다.
물론, 5버젼에서도 적용 가능합니다~
php 버젼이 4 인 분들은 반드시,
modules/member/member_controller.php 마지막 함수라인을 이렇게 넣어보세요.
확인결과 zb4에서 마이그레이션 후에 로그인 정상작동 됩니다.
/**
* @brief mysql old_password 의 php 구현 함수
* 제로보드4나 기타 mysql4.1 이전의 old_password()함수를 쓴 데이터의 사용을 위해서
* mysql의 password.c 소스 참조해서 구현함
**/
function mysql_pre4_hash_password($password) {
$nr=0x50305735;
$nr2=0x12345671;
$add=7;
$charArr = preg_split("//", $password);
foreach ($charArr as $char) {
if (($char == '') || ($char == ' ') || ($char == ' ')) continue;
$charVal = ord($char);
$nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $charVal;
}
return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
}
/** 5.0 이상일 경우
function mysql_pre4_hash_password($password) {
$nr = 1345345333;
$add = 7;
$nr2 = 0x12345671;
settype($password, "string");
for ($i=0; $i<strlen($password); $i++) {
if ($password[$i] == ' ' || $password[$i] == ' ') continue;
$tmp = ord($password[$i]);
$nr ^= ((($nr & 63) + $add) * $tmp) + ($nr << 8);
$nr2 += ($nr2 << 8) ^ $nr;
$add += $tmp;
}
$result1 = sprintf("%08lx", $nr & ((1 << 31) -1));
$result2 = sprintf("%08lx", $nr2 & ((1 << 31) -1));
if($result1 == '80000000') $nr += 0x80000000;
if($result2 == '80000000') $nr2 += 0x80000000;
return sprintf("%08lx%08lx", $nr, $nr2);
}
**/
'정보기술 > 일반' 카테고리의 다른 글
MySQL 4.x 에서 5.x 로 변경시 한글(UTF-8) 및 Password 문제 (0) | 2007.08.27 |
---|---|
Windows Vista 파일 및 레지스트리 가상화 (0) | 2007.08.23 |
PC용 GPS Navigation 소프트웨어 (0) | 2007.08.14 |
제로보드 - 최근 코멘트를 종합으로 추출하는 기능 (0) | 2007.07.18 |
로봇에 의한 광고글 쓰기방지 기법 (0) | 2007.07.17 |