⌨️/Node.js

[Node.js] bcrypt 함수로 암호화하기

S0 2024. 2. 6. 22:40

 

 

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 로 진행할 수 있다.

 

 


 

비크립트는 단방향 암호화 방식이라 기존의 비밀번호로 완전히 복구는 불가능하지만,

입력된 문자열(비밀번호) === 암호화된 문자열(비밀번호) 의 비교는 가능하기 때문에 검증까지 할수있다.