이전 목록 다음
채택완료

login_password_check 함수

2020-11-30 (월) 15:32:40 9,571

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

Copy
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개 / 댓글 2개

채택된 답변
+20 포인트

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 형태로 암호화를 해주는 함수 입니다.

답변에 대한 댓글 2개

답변 감사합니다.
근데 구버전은 5.4 이전에만 사용되는거 아닌가요?
5.4이후에도 계속 사용이 되는건가요?
5.3을 쓰시던분도 5.4로 옮길수있고 하다보니
그런것 같습니다.

답변을 작성하려면 로그인이 필요합니다.