임의의 길이를 갖는 데이터에 대해 고정된 길이의 데이터로 매핑하는 함수.
해시함수를 거쳐 나온 고정된 길이의 데이터를 해시값이라고 한다.
따로 암호화 키를 받지 않기때문에 고정된 입력값에 항상 고정된 해시값이 나오게된다.
특징을 살펴보자면
하지만 입력값이 같으면 출력되는 해시값이 같다는점을 이용한 '레인보우 테이블' 이란게 있다.
간단하게 해시함수를 사용하여 만들어 낼수 있는 값을 대량으로 저장한 표다.
즉 이를보고 원본의 데이터를 찾아낼 수 있다는건데 이것때문에 'Salt'가 생겼는데
Salt는 해시함수의 입력값에 추가로 들어가는 작은 '랜덤' 데이터다.
말그대로 입력값에 소금을 친다는 느낌이다. 랜덤데이터로 들어가기때문에 아무리 레인보우테이블에서 찾아도 입력값이랑 맞기에는 쉽지 않을것이다.
해시함수를 이용한 예를들자면,
우리의 DB에 유저정보를 저장한다고 하면. 유저에 password는 민감정보일텐데 이를 암호화된값이 아닌값을 그대로 넣으면. db의 접근이 가능한 자들은 모두 유저의 password를 캘수있다
그래서 유저의 암호를 해시함수를 거친 해시값으로 db에 저장을하는거다!
유저의password + salt -> (해시함수) -> 해시값.
이걸도와주는 node.js의 라이브러리가 node.bcrypt.js다
// hash
import bcrypt from 'bcrypt'
const hashValue = bcrypt.hash(input,saltRounds,callback)
//or
cosh hashValue = await bcrypt.hash(input,saltRounds)
bcrypt는 promise를 지원하기때문에 async/await도 쓸수있다. 이경우 당연히 callback은 생략되어도 될거다.
.hash(password,saltRound,callback) or
bcrypt는 promise에서 사용가능한 모든 promise구현을 사용하기때문에 async/await도 가능하겠지
놀랍게도 'salt'를 추가해줘서 해시함수를 돌리는데 check기능이 어떻게있지 싶기도 한데 있다
const match = await bcrypt.compare(input,hash)
//return boolean
마찬가지로 3번째인자에 콜백을 받긴하지만 promise를 지원하기때문에 async/await을 쓰고 콜백은 생략했다.
프로세스가 컴퓨터에서 동작하는 방식에 영향을 주는 변수들의 모임
.env파일에서 process.env로 환경 변수를 불러오는 zero 종속성 모듈
// in .env
KEY=VALUE
//참조
process.env.KEY = VALUE
// common JS
require('dotenv').config({path:path}) //path가 있을시.
// use import in ES6
import 'dotenv/config'
import dotenv from 'dotenv'.config()
이후 process.env.KEY로 참조해서 쓰면 된다