상세 컨텐츠

본문 제목

[nestJs]bcrypt가 무엇인가

카테고리 없음

by esoesmio 2024. 5. 10. 13:07

본문

`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`를 사용하면 비밀번호 관련 보안 수준을 높일 수 있으며, 웹 애플리케이션에서 사용자의 데이터 보호에 큰 도움이 됩니다.

댓글 영역