login_password_check 함수

login_password_check 함수

QA

login_password_check 함수

답변 1

본문

login_password_check 함수를 해석하는 중에 모르겠는 부분을 질문합니다.


if(G5_STRING_ENCRYPT_FUNCTION === 'create_hash' && (strlen($hash) === G5_MYSQL_PASSWORD_LENGTH || strlen($hash) === 16)) {
        if( sql_password($pass) === $hash ){
 
            if( ! isset($mb['mb_password2']) ){
                $sql = "ALTER TABLE `{$g5['member_table']}` ADD `mb_password2` varchar(255) NOT NULL default '' AFTER `mb_password`";
                sql_query($sql);
            }
            
            $new_password = create_hash($pass);
            $sql = " update {$g5['member_table']} set mb_password = '$new_password', mb_password2 = '$hash' where mb_id = '$mb_id' ";
            sql_query($sql);
            return true;
        }
    }

1. G5_STRING_ENCRYPT_FUNCTION === 'create_hash' 이 부분은 무엇을 의미하는 조건인가요?

2. mb_password2 column 이 없을 경우 추가해주는 이유가 무엇인가요?

3. create_hash() 함수는 무엇을 하는 함수인가요?

이 질문에 댓글 쓰기 :

답변 1

1. www/config.php 파일에 G5_STRING_ENCRYPT_FUNCTION 해당 상수가 있습니다.

2가지 타입으로 사용하는데, sql_password or create_hash로 사용합니다.

이 조건에서는 테이블의 mb_password 필드의 암호화된 패스워드와,  cofing파일에서 설정 한

G5_MYSQL_PASSWORD_LENGH(패스워드 길이)를 비교합니다.

쉽게말해, 구버전 신버전의 차이인데 mysql password length 41, old_password 의 경우에는 16자 입니다.

그렇기 때문에 만약 패스워드가 16자리라면 mb_password2 필드를 추가해줍니다.

 

2.create_hash함수를 사용하여 PBKDF2 타입으로 패스워드를 사용할 경우, 매번 로그인 마다 DB를 열어보시면 mb_password 값이 바뀌는 것을 확인 할 수 있습니다.

정확히 분석을 더 해봐야하겠지만..  제 추측에는 해당 암호는 계속 바뀌기 때문에

mb_password2에 구버전의 암호를 넣어두고, 신 버전의 암호는 mb_password에 넣는 듯합니다.

 

3. PBKDF2 형태로 암호화를 해주는 함수 입니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
filter #sql ×
전체 728
© SIRSOFT
현재 페이지 제일 처음으로