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