bcrypt는 암호화 해시 함수의 한 종류이다.
레인보우 테이블에 대항하기 위해 해시 함수에 솔트를 함께 사용한 것이 비크립트라고 하는데
레인보우 테이블은 뭐고 솔트는 뭘까...
rainbow table 은 해시 함수를 이용하여 나올 수 있는 모든 값을 전부 저장한 테이블이고, 이 값들을 하나하나 대조해서 찾아내는 방식으로 사용된다.
salt는 찾아보니 암호학 용어라고 하는데, 비밀번호에 소금을 친다는 느낌으로 이해하면 된다고 하셨다.
나는 이번 프로젝트에서 회원가입시 사용자의 비밀번호를 받아와 암호화하는 용도로 사용했다.
// npm
npm install bcrypt
// yarn
yarn add bcrypt
먼저 터미널에서 비크립트를 설치한다.
const hashedPassword = await bcrypt.hash(password, 10);
hashedPassword 라는 변수에 bcrypt.hash 함수를 할당했다.
인자로는 비밀번호, 몇 단계로 암호화를 진행할지(이 부분이 바로 salt) 쓸 수 있고 나는 10으로 해봤다.
const user = await prisma.users.create({
data: { email, password: hashedPassword, name },
});
데이터에 비밀번호를 받아올 때는 이렇게 해시화된 비밀번호로 설정해줬다.
if (!(await bcrypt.compare(password, user.password))) {
return res.status(401).json({ message: '비밀번호가 일치하지 않습니다.' });
}
복호화는 이렇게 bcrypt.compare 로 진행할 수 있다.
비크립트는 단방향 암호화 방식이라 기존의 비밀번호로 완전히 복구는 불가능하지만,
입력된 문자열(비밀번호) === 암호화된 문자열(비밀번호) 의 비교는 가능하기 때문에 검증까지 할수있다.
'⌨️ > Node.js' 카테고리의 다른 글
[NestJS] (0) | 2024.04.11 |
---|---|
[Node.js] 테스트 코드 (Test Code), Jest 테스팅 프레임워크 (0) | 2024.02.28 |
[Node.js] npx prisma db push (0) | 2024.01.31 |
[Node.js] MongoDB, Mongoose, schema, model 정리 (1) | 2024.01.28 |
[Node.js] express, module, router, req/res, api 정리 (0) | 2024.01.26 |