반응형
bcrypt를 이용한 비밀번호 암호화
1. bcrypt 란?
node에서 비밀번호와 같은 보안이 필요한 데이터를 hashing 하는데 유용한 모듈이다. 요즘은 그냥 암호화가 아니라 salt 를 이용한 기법으로 암호화를 하는데 이번 글에선 salt를 추가한 암호화에 대해서 다룬다.
Salting은 같은 입력값에 대해 동일한 해쉬값을 출력하는 문제를 방지하기 위해 난수를 추가하여 해시함수에 집어 넣는 개념이다. "비밀번호 + Salt 값"의 해시가 함께 DB에 저장된다.
$npm install bcrypt
//typescript 이용시 아래도 추가 설치
$npm install @types/bcrypt
2. 암호화
파라미터로 받은 password를 saltRound를 10회를 돌린 후 마지막 값을 집어 넣는다. saltRound란 hash해서 나온 값에 다시 salt를 적용하여 반복하는 횟수를 뜻하며 기본 값으로 10이 설정되어있다.
const insertItem = async (args : any) => {
//비밀번호 암호화
const hashedPassword = await bcrypt.hash(args.password, 10);
const newMember : MemberDto = {
user_id : args.user_id,
password : hashedPassword,
member_type : args.member_type,
reg_type: args.reg_type,
reg_channel: args.reg_channel,
member_status : args.member_status,
info_period : args.info_period,
sms_receive : args.sms_receive,
email_receive : args.email_receive
}
try {
const member : Member = await Member.create(newMember);
return {res : true, msg : `created ${args.user_id}.`, data : [member]};
} catch(error) {
return {res : false, msg : error};
}
}
반응형
3. 복호화
bcrypt의 compare함수를 사용하여 ecrypted 된 비밀번호와 입력된 비밀번호를 비교한다.
const login = async (id: string, password: string) => {
const member = await Member.findOne({where : { user_id : id}});
if (!member)
{
throw Error(`Member not existed. id: ${id}`);
}
const samePassword = await bcrypt.compare(password, member.password);
if (samePassword === false)
{
throw Error(`Invalid Password`);
}
member.password = password;
const loginToken = jwt.sign(member, process.env.SSAMJOB_SECRET as jwt.Secret);
return { res : true, message : `로그인 되었습니다.`, token : loginToken};
}
반응형
'개발 Study > Node' 카테고리의 다른 글
[Sequelize] ForeignKey로 Cascade delete 적용하기 (0) | 2022.12.15 |
---|---|
[Node.js] 공공 오픈 API 이용하기 - 사업자 휴/폐업 실시간 조회 (5) | 2022.10.20 |
[SocketIO/WebRTC] 줌 클론 코딩(2) - WebRTC로 카메라 연결하기 (3) | 2022.08.23 |
[SocketIO/WebRTC] 줌 클론 코딩(1) - Socket.io로 채팅 만들기 (3) | 2022.08.22 |
[Error] npm i @socket.io/admin-ui 설치 에러 해결 (1) | 2022.08.19 |
댓글