`bcryptjs` 라이브러리는 비밀번호를 안전하게 해시하기 위해 널리 사용되는 JavaScript 라이브러리입니다. `import * as bcrypt from 'bcryptjs';` 라인은 Node.js 환경에서 `bcryptjs` 라이브러리를 모듈로 가져와 사용할 수 있게 하는 명령입니다. 이렇게 하면 `bcrypt` 객체를 통해 라이브러리가 제공하는 모든 함수를 사용할 수 있습니다.
### bcryptjs의 주요 기능들
1. **비밀번호 해싱**: `bcryptjs`는 사용자의 비밀번호를 안전하게 저장하기 위해 해시 함수를 제공합니다. 해시는 일방향 함수로, 원래의 비밀번호를 해시 값으로 변환하지만, 해시 값에서 원래의 비밀번호로 되돌리는 것은 불가능합니다.
2. **솔트(Salt) 사용**: 솔트는 해시 과정에서 비밀번호에 추가되는 무작위 데이터입니다. 각 비밀번호에 대해 유니크한 솔트를 생성하고 이를 비밀번호와 함께 해싱함으로써, 동일한 비밀번호라도 다른 해시 값을 가지게 됩니다. 이는 레인보우 테이블 공격을 방지하는 데 도움을 줍니다.
3. **해시 검증**: 사용자가 로그인을 시도할 때, 입력한 비밀번호를 같은 방식으로 해시하고 저장된 해시와 비교합니다. `bcryptjs`는 이를 위한 함수를 제공하여, 입력된 비밀번호가 초기에 등록된 비밀번호와 일치하는지 안전하게 확인할 수 있습니다.
### 예제: 비밀번호 해싱 및 검증
```javascript
const bcrypt = require('bcryptjs');
// 비밀번호 해싱
async function hashPassword(password) {
const salt = await bcrypt.genSalt(10); // 솔트 생성, 10은 솔트의 복잡성을 의미
const hash = await bcrypt.hash(password, salt); // 비밀번호와 솔트를 해싱
return hash;
}
// 해시된 비밀번호 검증
async function verifyPassword(password, hash) {
return await bcrypt.compare(password, hash); // 입력된 비밀번호와 저장된 해시 비교
}
// 사용 예
async function main() {
const password = 'userPassword123';
const hash = await hashPassword(password);
console.log('Hashed Password:', hash);
const isMatch = await verifyPassword(password, hash);
console.log('Password valid:', isMatch);
}
main();
```
위 예제는 사용자의 비밀번호를 안전하게 처리하는 방법을 보여줍니다. 이처럼 `bcryptjs`를 사용하면 비밀번호 관련 보안 수준을 높일 수 있으며, 웹 애플리케이션에서 사용자의 데이터 보호에 큰 도움이 됩니다.
댓글 영역