출처: 김상헌 강사님 수업
키key를 이용하여 값value를 (빠르게!) 알 수 있다.
장점:
단점:
(동사) (to) hash
단방향 암호화 기법으로 해시함수를 이용해서 키를 고정된 길이의 암호화된 문자열(해시값)로 바꿔버리는 것.
매핑 전 데이터의 값. 평문으로, 즉 오리지널 값이다.
다양한 길이의 들어오는 key(평문 = 오리지널 값)들을 미리 지정한 규칙에 의해 일정한 길이의 해시값(정수값- 숫자!)으로 바꿔주는 역할을 함.
해시값은 곧 인덱스가 된다.
이로 인해 저장소를 효율적으로 운영할 수 있음.
함수 규칙에 따라 들어간 값들은 기억해놓은 자리들이 있다보니 바로 조회가 가능함.
(명사) a hash value
매핑 후의 데이터 값 (해시 돌아가고 나서의 숫자 값. (해시값= 암호문!)
(동명사) hashing
매핑하는 과정.
해시 함수에 따라 배정된 자리에 2개 이상의 값이 들어가서 데이터가 넘치는 것.
이 경우 같은 인덱스에 저장되고(인덱스에 값 n개!), 데이터는 연결리스트 방식으로 저장됨.
➜ 해결법! 체이닝 및 개방주소법
해시 충돌 시 데이터는 연결리스트 방식으로 저장됨.
최악의 경우 시간복잡도 0(n).
해시 충돌 시 다른 index에 value 데이터를 삽입함.
개방주소법 종류 3가지!
1) 선형탐색: 다음 버킷(index)에 저장함
2) 제곱탑색: 제곱만큼 건너뛴 버킷에 저장함
3) 이중해시: 해시 충돌 시 다른 해시함수를 한 번 더 적용한 결과를 저장함
대표적으로 MD5, SHA1 가 있다.
➜ 들어가는 문자열 길이와 상관 없이 반환되는 해시의 길이는 일정함
SALT+해시함수를 알아내면 평문(오리지널 값)으로 복호화 할 수 있나요?
➜ 복호화는 양방향(암호-복호) 암호화에서만 가능함.
그래서 복호화를 못하게 하는 단방향 암호화를 사용해야 함!!
- iterable 객체인지 알고 싶으면: dir 찍어서 prototype에 symbol.iterator 있으면 맞음
- generator function에 대해 좀 알아볼까...