npm i jsonwebtoken --save
hashPw = crypto.createHmac('sha256', req.body.id)
.update(req.body.password).digest('hex');
문자를 HASH하기
문자가 들어오면 a => fasd1qw57das6d1w615sa6d4cxz65 1660x347438
hex -> 16진수로 바꾸는 거
바꾼걸 복원할 수 없다.
단방향임
비교하려면 문자를 다시 해쉬화 시켜서 다시 비교한다.
해쉬란?
임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것
키에 대한 해시 값을 사용하여 값을 저장하고 키-값 쌍의 갯수에 따라 동적으로 크기가 증가하는 associate array
키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 하며 이때 사용하는 함수(알고리즘)를 해시 함수라고 함
해시 값 자체를 index로 사용하기 때문에 평균 시간 복잡도가 O(1)로 매우 빠름
해시 함수(hash function)란?
임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환시켜주는 함수
원래의 값이나 키를 색인하는데 사용되며, 그 값이 관련된 데이터가 검색될 때마다 다시 사용된다.
데이터의 효율적 관리를 목적으로 인의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
계산이 복잡하지 않고 키값에 대해 중복없이 해시값을 고르게 만들어 내는 함수가 좋은 함수 (충돌이 일어나지 않을수록 좋다)
문자열(String)을 받아서 숫자를 반환하는 함수 (함수는 문자열에 대해 숫자를 Mapping(할당)).