일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 보안
- 톰캣
- 이클립스
- 자바
- git
- java
- Javascript
- IntelliJ
- 인텔리제이
- svn
- oracle
- WAS
- SQL
- db
- DBeaver
- Eclipse
- JSON
- HTTP
- 디비버
- Linux
- 모바텀
- Redis
- 상태코드
- mybatis
- 오라클
- JQuery
- Tomcat
- Server
- 자바스크립트
- 마이바티스
- Today
- Total
JongTachi의 개발 블로그
[IT info] Hash Function(해시 함수) 본문
IT공부해본 사람이라면 한번은 들었을 '해시 함수'에 대해서 설명드리도록 하겠습니다.
해시 함수를 설명하기 전에 ..
개발자라면 한번쯤 비밀번호 시스템을 구현하죠. 여러분은 비밀번호가 어떻게 저장되는지 아시나요?
예를 들어 여러분이 네이버 계정을 만드는데 비밀번호를 '12345'라고 입력한 뒤, 네이버 DataBase에 '12345'라고 그대로 저장된다면 어떻습니까? 굉장히 불안하겠죠?
왜나면 해커가 네이버 DataBase를 해킹하면 비밀번호가 그대로 보일테니까요.
여러분의 비밀번호를 안전하게 저장하기 위해 '해시 함수'라는 것을 구현합니다.
1. 해시함수란?
해시 함수는 임의의 길이를 가진 데이터를 고정된 길이의 해시 값으로 매핑하는 수학적 알고리즘입니다. 해시 함수는 다양한 목적으로 사용되며, 주요 용도 중 하나는 데이터 무결성 검사인데, 입력 데이터의 작은 변경 사항이 해시 값에 큰 변화를 일으키는 특성 때문에 가능합니다
위에서 말한 정의를 읽어보면 무슨 말인지 크게 와닿지가 않습니다.(저도 그랬어요..ㅎㅎ).
한마디로 해시 함수는 내가 입력한 값을 무작위 값으로 둔갑시켜 주는 녀석이라고 보면 됩니다.
예를들어 여러분이 '12345'라고 비밀번호를 입력해서 회원가입을 하면 해시 함수가 !aef3eZ&^와 같은 값으로 만들어 저장하는 것이죠.
동작원리를 보면서 더 깊게 파악해봅시다.
2. 해시함수의 동작원리
규칙1. 동일한 입력값에 대해 동일한 출력값을 가진다.
해시 함수라는 녀석은 동일한 입력값에 대해 동일한 출력값을 가지는 규칙이 있습니다. 아까 예를 들었던 12345와 !aef3eZ&^의 1대1 대응 관계는 계속 유지된다는 뜻입니다.
규칙2. 입력값이 아주 살짝만 바뀌어도 출력값은 엄청나게 크게 바뀐다.
예를 들어 12345가 아닌 1234가 입력된다면 출력값은 5a1ZKer!와 같이 완전히 다른 결과가 나타납니다. 상상할 수 없을 정도로 무작위성을 갖고있는 셈이지요.
규칙3. 반대로 입력한다고 해서 원래 값이 나오지 않는다.
해시 함수는 반대로 입력하면 원래 값이 나오거나 하지 않습니다. 한쪽 방향으로만 설계된 함수이기 때문입니다. 예를 들면 아까 12345를 넣어 만든 !aef3eZ&^값을 다시 해시 함수에 넣어도 12345가 나오지 않습니다.
이런 해시 함수의 3가지 규칙을 이용하면 꽤나 괜찮은 비밀번호 시스템을 만들 수 있습니다.
여러분이 입력한 비밀번호를 해시 함수에 통과시켜서 얻은 무작위 결과값을 DataBase에 저장하는 것이죠.
그러면 안전하게 비밀번호를 관리를 할 수 있을 것입니다.
이상 해시 함수에 대해 알아봤습니다.
다음에 더 유익한 정보를 들고 찾아뵙겠습니다.
감사합니다.
'IT Information' 카테고리의 다른 글
[IT Info] 인터페이스란? (0) | 2023.07.04 |
---|---|
[IT Info] 인증서비스 SSO(Single Sign-on)와 SLO(Single Log-Out)의 차이점 (0) | 2023.06.29 |
[IT Info] 버전을 표기하는 방법? (0) | 2023.06.18 |
Clean Code 5가지 꿀팁 (0) | 2023.05.20 |
[IT info]객체지향 프로그래밍이란? (0) | 2022.12.16 |