WebTools

Useful Tools & Utilities to make life easier.

Bcrypt Generator

보안성이 높은 Bcrypt 해시를 생성합니다.

bcrypt 생성기란?

비밀번호를 안전하게 저장할 때 쓰는 bcrypt 해시를 만들어 주는 도구입니다. 입력한 문자열을 bcrypt로 변환하면 $2y$로 시작하는 60자 문자열이 나옵니다. 이 한 줄 안에는 알고리즘 표시, 비용 인자(cost), 무작위 솔트(salt), 그리고 해시 결과가 모두 담겨 있어 별도로 솔트를 보관할 필요가 없습니다.

MD5나 SHA 같은 일반 해시와 결정적으로 다른 점은 두 가지입니다. 첫째, bcrypt는 일부러 느리게 설계돼 공격자가 비밀번호를 대량으로 대입하기 어렵습니다. 둘째, 매번 새 솔트를 섞기 때문에 같은 비밀번호라도 실행할 때마다 결과가 다릅니다. 그래서 미리 계산해 둔 대조표(레인보우 테이블) 공격이 통하지 않습니다. 이 도구는 Laravel 프레임워크의 기본 설정(비용 인자 10~12)으로 해시를 만듭니다.

사용 방법

  1. 입력 칸에 해시로 바꿀 비밀번호 또는 문자열을 넣습니다.
  2. 생성 버튼을 누릅니다.
  3. 60자 bcrypt 해시가 나오면 복사해서 데이터베이스나 설정 파일에 저장합니다.

bcrypt 해시 구조 뜯어보기

결과 문자열은 $ 기호로 구획이 나뉩니다. 예를 들어 $2y$12$R9h/cIPz0gi.URNNX3kh2O... 는 다음과 같이 읽습니다.

구획의미
알고리즘2ybcrypt 방식 식별자
비용 인자12반복 횟수 = 2의 12제곱(4096)회
솔트앞 22자무작위로 섞인 값(자동 생성)
해시나머지솔트+비밀번호를 계산한 결과

비용 인자가 1 올라갈 때마다 계산량은 두 배가 됩니다. 값이 클수록 안전하지만 로그인 검증도 그만큼 느려지므로, 서버 성능에 맞춰 10~12 사이를 흔히 씁니다.

일반 해시와 무엇이 다른가

특성MD5 / SHA-256bcrypt
설계 속도매우 빠름일부러 느림
솔트없음(직접 붙여야 함)내장(자동)
같은 입력의 결과항상 동일매번 다름
비밀번호 저장부적합적합

자주 묻는 질문

같은 비밀번호인데 왜 결과가 매번 달라지나요?

실행할 때마다 무작위 솔트가 새로 섞이기 때문입니다. 솔트가 해시 문자열 안에 함께 저장되므로, 나중에 검증할 때는 그 솔트를 다시 꺼내 계산합니다. 결과가 달라도 검증에는 문제가 없습니다.

결과가 매번 다르면 로그인 확인은 어떻게 하나요?

저장된 해시에서 솔트와 비용 인자를 읽어, 사용자가 입력한 비밀번호에 같은 조건으로 다시 계산해 비교합니다. 대부분의 프레임워크는 이 검증 함수(예: Laravel의 Hash::check)를 기본 제공합니다.

비용 인자는 몇으로 하는 게 좋나요?

로그인 한 번에 0.1~0.3초쯤 걸리도록 맞추는 것이 일반적인 기준입니다. 서버가 빨라질수록 값을 조금씩 올려 공격 난이도를 유지합니다. 이 도구는 프레임워크 기본값을 사용합니다.

bcrypt에 입력 길이 제한이 있나요?

bcrypt는 입력의 앞부분(대략 72바이트)까지만 반영하는 특성이 있어, 아주 긴 비밀번호는 뒷부분이 무시될 수 있습니다. 매우 긴 입력이 필요하면 먼저 SHA-256으로 줄인 뒤 bcrypt에 넣는 방식이 쓰입니다.

비밀번호 전반은 어디서 더 볼 수 있나요?

강한 비밀번호의 길이·재사용·2단계 인증 기준은 비밀번호 보안 완벽 가이드에 정리돼 있습니다.