요즘에는 소셜 로그인을 많이 하기 때문에 비밀빈호가 전혀 필요하지 않는 경우가 많다. 비밀번호가 필요한 경우, 일반적으로 본인 외 누구도 알아서는 안되는 코드이기 때문에 암호화가 기본이다.
이번에는 가장 많이 쓰이는 단방향 암호화를 통해 비밀번호를 아주 비밀스럽게 만드는 방법을 코드로 알아보자.
import { pbkdf2Sync, randomBytes } from 'node:crypto';
const encryptPassword = (password) => {
const salt = randomBytes(64).toString('base64'); // random salt 생성
const iteration = 100000; // 해시 함수 반복 수
const keylen = 64; // 암호화 된 비밀번호 길이
const digest = 'sha512'; // HMAC digest algorithm
const derivedKey = pbkdf2Sync(password, salt, iteration, keylen, digest);
return { salt, password: derivedKey.toString('base64') };
};
const result = encryptPassword('password');
console.log(result)
result 결과는?
pbkdf2Sync 와 randomBytes 는 Buffer 를 반환하기 때문에 .toString('base64') 를 통해 base64 문자열로 변환하여 원하는 결과값을 얻어낼 수 있다.
해당 함수를 활용하여 클라이언트에서 로그인 하는 사용자의 비밀번호를 암호화 후 데이터베이스에 저장 된 비밀번호와 비교할 수 있다. salt 는 유저마다 랜덤하게 생성되므로 꼭 데이터베이스에 함께 저장 하도록 한다.
'Programming > Nodejs tips' 카테고리의 다른 글
Nodejs + Express + Typescript 프로젝트 세팅 (0) | 2022.11.17 |
---|---|
Nodejs 로 텍스트 파일 가져오기 (0) | 2022.11.16 |