그누보드4의 암호를 영카트5 암호로 변경

그누보드4의 암호를 영카트5 암호로 변경

QA

그누보드4의 암호를 영카트5 암호로 변경

본문

현재 디비를 옮기려고 하는데. 문제가 되는 부분이 암호를 변경해야 됩니다.

 

암호 변경 방법이 보통 md5 알고 있어서 영카트 암호 방식을 md5로 바꿨는데.

 

그누보드4의 암호와 다르게 뜨고 있습니다.

 

 

그누보드4의 암호와 방식과 바꾸는 방법을 알려주셨으면 좋겠습니다. 

이 질문에 댓글 쓰기 :

답변 3

그누보드에서는 사용자계정의 암호를 mysql의 password()를 이용해서 암호화하고 있습니다.

이건 일반적으로는 복호화가 불가능하여 임의로 다른 방식의 암호화로 일괄변경은 어렵겠죠.

디비를 옮기신다고 하셨는데 mysql버전이 달라지는건가요?

그런 경우라면 일괄변경은 힘들더라도 사용자가 로그인 성공시에 변경되도록은 가능할듯 합니다.

bbs/login_check.php 여기서 아래의 부분을 찾습니다.

 

if (!$mb['mb_id'] || !check_password($mb_password, $mb['mb_password'])) {

    alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');

}

 

여길 아래와 같이 수정합니다.

 


function sql_old_password($value) {
    $row = sql_fetch(" select old_password('$value') as pass ");
    return $row['pass'];
}
if(
    $mb['mb_id'] && G5_STRING_ENCRYPT_FUNCTION == 'sql_password'
    && strlen($mb['mb_password']) == 16 && crypt_xdigit($mb['mb_password']) === TRUE // 디비에 저장된 비밀번호가 mysql 4.0 타입일때
    && $mb['mb_password'] === sql_old_password($mb_password) // 입력한 비번이 디비의 4.0 비번과 같고,
    && $mb['mb_password'] !== ($tmp_pw=sql_password($mb_password)) // 현재의 비번과 같지 않을때 == 현재의 비번이 4.1버전타입일때
) {
	// 현재 서버는 4.1x 이상이고, 기존비번은 4.0x 이므로 현재서버의 비번으로 변경
	$sql = " update {$g5['member_table']} set mb_passsword='$tmp_pw' where mb_id='$mb_id' ";
	sql_query($sql);
}
elseif (!$mb['mb_id'] || !check_password($mb_password, $mb['mb_password'])) {
    alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}

아래와 같이 암호화코드가 동일합니다.

mysql 버전에 따라서만 암호코드가 달라집니다. ^^

 

그누5에서의 비밀번호 암호화 함수

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'];

}

 

그누4에서의 비밀번호 암호화 함수 

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];

}

두가지방법을 테스트해보세요.

1. 망토님이 언급한 함수에서  

$row = sql_fetch(" select password('$value') as pass "); 을

$row = sql_fetch(" select old_password('$value') as pass "); 로 변경 후 테스트 

2. md5형식의 암호일 경우 config.php line172 

define('G5_STRING_ENCRYPT_FUNCTION', 'sql_password');

define('G5_STRING_ENCRYPT_FUNCTION', 'md5'); 로 변경.. 

 

테스트 해보세요


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

회원로그인

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