Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/Library/bcrypt 라이브러리: 비밀번호 암호화 가이드

bcrypt 라이브러리: 비밀번호 암호화 가이드

Library약 1년 전

비밀번호 암호화는 필수적입니다. bcrypt는 비밀번호를 안전하게 해시하고 저장하기 위한 강력한 라이브러리입니다.

 

bcrypt란?

bcrypt는 Blowfish 암호를 기반으로 한 비밀번호 해시 함수입니다. 이 함수는 입력된 비밀번호를 암호화하여 해시 값을 생성하며, 이는 비밀번호를 안전하게 저장하고 검증하는 데 사용됩니다. bcrypt는 강력한 보안과 속도를 제공하여 웹 애플리케이션의 비밀번호 보호에 널리 사용됩니다.

 

bcrypt 설치

Node.js 환경에서 다음 명령어를 사용하여 설치할 수 있습니다.

npm install bcrypt

 

기본 사용법

bcrypt 라이브러리를 사용하려면 먼저 해당 라이브러리를 불러와야 합니다.

const bcrypt = require('bcrypt');

 

비밀번호 해싱

비밀번호를 해싱하는 기본적인 방법은 다음과 같습니다. 해싱에는 bcrypt.hash 함수를 사용하며, 이 함수는 비밀번호와 솔트 라운드를 인자로 받습니다.

const bcrypt = require('bcrypt');
const saltRounds = 10;
const plainPassword = 'yourPassword123';
bcrypt.hash(plainPassword, saltRounds, (err, hash) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log('Hashed password:', hash);
});

 

비밀번호 검증

사용자가 입력한 비밀번호를 저장된 해시 값과 비교하여 검증하는 방법입니다. bcrypt.compare 함수를 사용합니다.

const hashedPassword = '$2b$10$ePjNEFv/E1YZHR6tI/2S/uXl8hi6G4g1o9tFtWJYspF1rN1QgLUiS'; // 예시 해시 값
bcrypt.compare(plainPassword, hashedPassword, (err, result) => {
  if (err) {
    console.error(err);
    return;
  }
  if (result) {
    console.log('비밀번호가 일치합니다.');
  } else {
    console.log('비밀번호가 일치하지 않습니다.');
  }
});

 

Next.js에서 사용하기

API 라우트에서 bcrypt 사용

/api폴더 즉 route를 뜻합니다. 입력 받은 암호를 bcrypt라이브러리를 활용해 암호화가 가능합니다.

import bcrypt from 'bcrypt';
export default async (req, res) => {
  if (req.method === 'POST') {
    const { password } = req.body;
    const saltRounds = 10;
    try {
      const hash = await bcrypt.hash(password, saltRounds);
      res.status(200).json({ hash });
    } catch (error) {
      res.status(500).json({ error: 'Internal Server Error' });
    }
  } else {
    res.status(405).json({ error: 'Method Not Allowed' });
  }
};

 

클라이언트에서 API 호출

Next.js 페이지에서 비밀번호 해싱 API를 호출하는 예시는 다음과 같습니다.

import { useState } from 'react';
export default function Home() {
  const [password, setPassword] = useState('');
  const [hashedPassword, setHashedPassword] = useState('');
  const handleSubmit = async (e) => {
    e.preventDefault();
    const res = await fetch('/api/hash-password', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ password }),
    });
    const data = await res.json();
    setHashedPassword(data.hash);
  };
  return (
    <div>
      <h1>비밀번호 해시 생성기</h1>
      <form onSubmit={handleSubmit}>
        <input
          type="password"
          value={password}
          onChange={(e) => setPassword(e.target.value)}
          placeholder="비밀번호 입력"
        />
        <button type="submit">해시 생성</button>
      </form>
      {hashedPassword && <p>해시된 비밀번호: {hashedPassword}</p>}
    </div>
  );
}

bcrypt 라이브러리는 JavaScript와 Node.js에서 비밀번호를 안전하게 해시하고 검증하는 데 매우 유용한 도구입니다. Next.js와 같은 최신 프레임워크와도 함께 사용 수 있습니다.