저번 시간에 로그인 로직을 몇 개 살펴보았는데 로그인을 구현할 때 해시함수를 사용하여 로그인을 수행할 수 있습니다.
일단, 해시함수가 무엇인지 먼저 알아보겠습니다.
해시함수란?
임의의 길이를 가진 데이터를 입력받아 고정된 길이의 값, 즉 해시값을 출력하는 일방향 함수입니다.
임의의 길이를 가진 데이터를 입력받아 고정된 길이의 값을 출력한다는 것이 무슨 뜻일까요??
예시를 보면 a라는 데이터를 이상한 문자열로 만들어진 것이 보이시나요?
다른 문자도 한번 해보겠습니다.
이렇게 a나 안녕이라는 임의의 문자를 넣었을 때 고정된 32자로 나타내는 것입니다. 32자 16진수 표현법이므로 각 자리마다 4비트씩하여 md5 해시함수는 총 128비트로 표현하는 것입니다.
해시함수가 임의의 데이터를 고정된 길이의 값으로 표현하는 것은 알겠는 데 다음 일방향 함수라는 것은 무슨 뜻일까요?
이것은 위의 예시로 a를 '0cc175b9c0f1b6a831c399e269772661'로 변환시킬 수는 있지만, 반대로 '0cc175b9c0f1b6a831c399e269772661'를 a로 되돌릴 수는 없다는 뜻입니다.
보통 암호화나 디코딩은 평문을 다른 문자열로 변경시킨 후 결과 문자열을 통해 다시 원래대로 복호화 할 수 있지만, 해시함수는 그것이 안된다는거죠!!
해시함수가 무엇인지는 이제 알겠는데 어떻게 로그인에 적용시킬 수 있는지 보겠습니다.
바로!! 다른 사람에게 알려지면 안되는 비밀번호를 해시함수를 통해 해시값을 구한 후 이것을 데이터베이스에 저장해놓습니다.
그러면 해시함수의 일방향성 때문에 만약 데이터베이스를 다른 사람이 볼 수 있다고 해도 비밀번호가 해시화되어 원래값을 알지 못 할 것입니다.
하지만 로그인 로직을 만들 때 우리는 입력 받은 비밀번호를 해시화 한 후 해시값으로 데이터베이스에서 비밀번호를 검색하면 로그인 성공 여부를 판단할 수 있습니다.
php에서 해시함수는 hash(사용할 해시 알고리즘, 해시할 값) 으로 사용할 수 있습니다.
해시 알고리즘은 엄청 많은데 그 중 저는 sha-256을 사용하였습니다.
바로 한번 해시함수를 사용하여 로그인 로직을 만들어 보겠습니다.
1. 해시함수를 사용하여 식별과 인증 동시에 수행하는 로그인 로직
식별과 인증을 동시에 하지만 저번과 다른점은 비밀번호를 해시화하여 저장한다는 것입니다.
비밀번호를 데이터베이스에 저장되어있는 값으로 입력해도 해시값을 다시 해시한 값과 비교하기 때문에 실패하는 것 확인 가능
2. 해시함수를 사용하여 식별과 인증을 분리해서 수행하는 로그인 로직
식별과 인증을 불리해서 실행하지만 저번과 다른점은 비밀번호를 해시화하여 저장한다는 것입니다.
이렇게 해시를 간단하게 알아보았고, 저번 시간과 합쳐 4가지의 로그인 로직을 만들어 보았습니다.
이것으로 로그인이 어떻게 구현되는 지 이해할 수 있다면 좋을 것 같습니다.
3-3에는 이제 이 로그인한 것을 어떻게 유지할 것인지 알아보겠습니다.
'웹 개발' 카테고리의 다른 글
웹 개발 공부하기 3 - 과제 (jwt) (2) | 2023.11.11 |
---|---|
웹 개발 일기장 3 - 3 (쿠키 및 세션) (0) | 2023.11.10 |
웹 개발 일기장 3 - 1 (로그인 로직) (2) | 2023.11.09 |
웹 개발 공부 일기장 2 - 과제 (로그인 페이지 With DB) (0) | 2023.11.06 |
웹 개발 공부 일기장 2 - 과제 (회원가입 페이지) (2) | 2023.11.04 |