bcrypt 라이브러리: 비밀번호 암호화 가이드
KUKJIN LEE • 5개월 전 작성
비밀번호 암호화는 필수적입니다. 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와 같은 최신 프레임워크와도 함께 사용 수 있습니다.