글모음

[웹개발] bcrypt와 bcryptjs 비교하기 - 암호화 라이브러리 본문

프로그래밍 공부/기타

[웹개발] bcrypt와 bcryptjs 비교하기 - 암호화 라이브러리

Nova_61 2023. 3. 16. 11:07
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}`);

 

위의 코드에서 볼 수 있듯이, 사용법은 비슷하다.

 

  1. bcrypt.genSaltSync() 메서드를 사용하여 salt를 생성
  2. bcrypt.hashSync() 메서드를 사용하여 비밀번호를 해싱
  3. bcrypt.compareSync() 메서드를 사용하여 해싱된 비밀번호와 입력한 비밀번호가 일치하는지 확인한다.

[ 결론 ]

둘 중 어떤 라이브러리를 선택하더라도 안전하고 신뢰성 높은 암호화를 구현할 수 있다.

다만, bcrypt는 더 빠른 암호화 속도와 다양한 플랫폼에서 사용할 수 있는 장점이 있지만 네이티브 모듈이기 때문에 추가 설정이 필요하고, bcryptjs는 모듈 설치 없이 사용 가능한 간편함이 장점이다. 나는 현재 MERN stack으로 프로젝트를 개발 중이라서 간단하게 사용자 비밀번호를 암호화처리를 할 생각이라 bcryptjs를 사용하기로 했다.

728x90
반응형
Comments