반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 클린 코드
- 테스팅 자격증
- 코드잇
- csts
- 미켈란젤로
- react
- 토익 환급
- 취미
- clean code
- IT자격증
- KSTQB
- 코딩테스트
- 그림
- 알고리즘
- Python
- 파이썬
- IT 자격증
- 색연필
- 소묘
- PrivateRouter
- 다비드상
- 프로그래밍
- 연필
- 코딩
- Kriss 재택
- 연필소묘
- 재택근무
- 웹개발
- leetcode
- 프로그래머스
Archives
- Today
- Total
글모음
[웹개발] bcrypt와 bcryptjs 비교하기 - 암호화 라이브러리 본문
728x90
반응형
bcrypt VS bcryptjs
회원가입과 로그인 페이지를 만들면서 클라이언트 측에서 백앤드로 비밀번호를 보내는 과정에서 비밀번호를 그냥 보내지 않고 암호화해서 보내야 하는데, 암호화 라이브러리를 찾아보다가 bcypt와 bcyptjs에 대해 알게 되었다. 둘 다 이름도 비슷하고, 쓰는 방법도 비슷해서 이번 기회에 정리해보려고 한다.
[ bcrypt ]
- C++로 작성된 네이티브 모듈이라 속도가 빠름
- 서버에서 사용 시 이점이 있지만, 적절한 방식으로 설치 및 사용을 해야 함
- bcryptjs보다 더 많은 알고리즘 옵션을 제공
[ bcryptjs ]
- JavaScript로 작성된 모듈
- 네이티브 모듈보다 느리지만, Node.js 및 브라우저 모두에서 사용 가능 (그래도 성능 저하는 그렇게 크지는 않다고 한다.)
- 설치 및 사용이 간단하고, 적은 설정으로도 사용 가능
- bcrypt와 비교해서 보안성은 약간 낮지만, 여전히 안전한 수준임
bcrypt와 bcryptjs는 둘다 이름에서 알 수 있듯 Node.js에서 비밀번호를 해싱하기 위한 bcrypt 알고리즘을 구현한 라이브러리이다.
[ bcrypt의 예시 ]
const bcrypt = require('bcrypt');
// 비밀번호 해싱
const saltRounds = 10;
const myPlaintextPassword = 'password';
const salt = bcrypt.genSaltSync(saltRounds);
const hash = bcrypt.hashSync(myPlaintextPassword, salt);
// 해시값과 비밀번호 일치 여부 확인
bcrypt.compareSync(myPlaintextPassword, hash); // true
bcrypt.compareSync('notmypassword', hash); // false
[ bcryptjs의 예시 ]
const bcrypt = require('bcryptjs');
const plainPassword = 'password1234';
const salt = bcrypt.genSaltSync(10);
const hashedPassword = bcrypt.hashSync(plainPassword, salt);
console.log(`hashed password: ${hashedPassword}`);
const isMatch = bcrypt.compareSync(plainPassword, hashedPassword);
console.log(`is match: ${isMatch}`);
위의 코드에서 볼 수 있듯이, 사용법은 비슷하다.
- bcrypt.genSaltSync() 메서드를 사용하여 salt를 생성
- bcrypt.hashSync() 메서드를 사용하여 비밀번호를 해싱
- bcrypt.compareSync() 메서드를 사용하여 해싱된 비밀번호와 입력한 비밀번호가 일치하는지 확인한다.
[ 결론 ]
둘 중 어떤 라이브러리를 선택하더라도 안전하고 신뢰성 높은 암호화를 구현할 수 있다.
다만, bcrypt는 더 빠른 암호화 속도와 다양한 플랫폼에서 사용할 수 있는 장점이 있지만 네이티브 모듈이기 때문에 추가 설정이 필요하고, bcryptjs는 모듈 설치 없이 사용 가능한 간편함이 장점이다. 나는 현재 MERN stack으로 프로젝트를 개발 중이라서 간단하게 사용자 비밀번호를 암호화처리를 할 생각이라 bcryptjs를 사용하기로 했다.
728x90
반응형
'프로그래밍 공부 > 기타' 카테고리의 다른 글
[ Error ] Error: [PrivateRoute] is not a <Route> component.All component children of <Routes> must be a <Route> or <React.Fragment> (1) | 2023.03.20 |
---|---|
[ 웹 보안 ] bcrypt, crypto (0) | 2023.03.17 |
[웹개발] Canvas API 다루면서 생긴 문제들 - globalCompositeOperation, resizing (0) | 2023.03.06 |
[독서] - Clean code / 2장 의미 있는 이름 (0) | 2022.04.25 |
[독서] - Clean code / 1장 깨끗한 코드 (0) | 2022.04.23 |
Comments