2011-10-12 2 views
0

사용자 인증이 필요한 응용 프로그램을 작성 중입니다. 나는 프로파일 테이블을 가지고있는 데이터베이스를 가지고이 일을하고 있으며, 테이블 안에 사용자 이름과 패스워드가있다. 나는 사용자 이름과 암호를 입력 한 다음 주어진 데이터를 데이터베이스의 데이터와 비교하도록 할 것입니다. 그리고 그들이 동일하다면, 그들은 로그인되어 있습니다. 이것을 올바른 방법입니까?사용자 인증 비밀번호 데이터베이스 체크인

올바른 방법 일 경우 사용자의 암호와 데이터베이스의 암호를 어떻게 비교합니까? 데이터베이스의 암호는 PASSWORD 기능을 사용하여 암호화되었습니다.

감사합니다.

+0

PASSWORD()가 귀하의 응용 프로그램에 의해 사용되어서는 안된다 : http://dev.mysql.com/doc/refman/5.0/en/encryption-functions.html#function_password 또한, 무엇을 당신하면 어떻게 다른 DB를 지원해야합니까? – TJR

+0

다른 데이터베이스를 지원할 필요가 없습니다. 이것은 단지 클래스를위한 것입니다. – prolink007

+0

다음은 이와 비슷한 또 다른 질문입니다. http://stackoverflow.com/questions/1751152/mysql-password-function – TJR

답변

1

AES_ENCRYPT(), AES_DECRYPT() 함수를 사용할 수 있습니다. 여기 내가 제안하는 방식. 프로그램에서 암호화 키를 저장하는 일정한 전역 변수를 유지합니다.

이렇게 암호를 비교할 수 있습니다. profile.userID = '+ 아이디 +'AND profile.password = AES_ENCRYPT ('+ givenpassword +', ' "+ USER_ENCRYPTION_KEY +"')

희망이 당신을 도울 것입니다 프로필에서

SELECT USER_ID.

프라 사드.

+0

올바른 방향으로 큰 도움을주었습니다. 다른 암호화 알고리즘을 사용했는데 정확히 내가 찾고있는 알고리즘이었습니다. 감사 – prolink007

1

당신은 기본을 가지고 있습니다. 그렇습니다. 이 암호에 salt을 추가 한 후 다음 사용자 이름, 소금과 DB에서 해시 암호 + 소금을 저장 등) 등 SHA1(), SHA256 (같은 단방향 해시 알고리즘을 사용하여 해시 것이 관례입니다. 자격 증명을 확인할 때 사용자 이름을 기반으로 소금을 검색 한 다음이를 사용하여 제공된 암호를 해시 한 다음 저장 한 암호와 비교합니다. 사용자에 대한 응답이 실패하면 암호 또는 사용자 이름이 잘못되었는지 표시해서는 안됩니다. 그냥 뭔가 잘못되었습니다.

소금은 사전 공격을 방지합니다. 단방향 해시는 사용자 나 사용자를 포함하여 암호를 검색 할 수 없도록합니다. 리셋 만 할 수 있습니다.

이것은 포괄적 인 가이드가 아닙니다. 좀 더 가까이에 대한 제안. 참조에 언급 한 바와 같이

관련 문제