Bcrypt 해시 생성 및 검증 도구
온라인으로 bcrypt 비밀번호 해시를 생성·검증하세요 — 조절 가능한 비용 인자, $2b$/$2a$/$2y$ 접두사 지원. 100% 브라우저에서 실행, 비밀번호는 업로드되지 않습니다.
Bcrypt란?
Bcrypt는 비밀번호를 안전하게 저장하기 위해 특별히 설계된 비밀번호 해싱 함수입니다. 비밀번호를 평문으로 보관하는 대신, 서버는 단방향 bcrypt 해시를 저장합니다. 사용자가 로그인하면 서버는 제출된 비밀번호를 같은 방식으로 해시한 뒤 두 해시가 일치하는지 확인합니다. Bcrypt는 Blowfish 암호를 기반으로 하며 1999년 Niels Provos와 David Mazières가 설계했는데, SHA-256 같은 범용 해시와 구별되는 의도적 특징이 하나 있습니다. 바로 의도적으로 느리게 만들어졌으며, 하드웨어가 빨라짐에 따라 조절 가능한 비용 인자로 시간이 지날수록 더 느리게 만들 수 있다는 점입니다.
bcrypt 해시는 하나의 자기 기술적인 60자 문자열입니다 — 예를 들어 $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq처럼요. 여기에는 네 부분이 담겨 있습니다. 버전($2b$), 비용(12, 로그 형태의 작업 인자), 22자 Base64 솔트, 그리고 31자 Base64 다이제스트입니다. 솔트가 무작위이며 해시에 포함되어 있으므로 같은 비밀번호라도 매번 다른 해시가 만들어지는데 — 이는 레인보우 테이블을 무력화하고 두 사용자가 같은 비밀번호를 골랐다는 사실을 숨깁니다. 검증은 저장된 해시에서 솔트와 비용을 다시 읽어내 후보를 재해시하므로, bcrypt는 비밀번호를 복구하기 위해 해시를 되돌릴 필요가 (그리고 되돌릴 수도) 없습니다.
이 도구는 번들된 bcrypt 구현을 사용해 전적으로 브라우저에서 실행됩니다 — 비밀번호나 해시는 절대 업로드되지 않습니다. 선택한 비용과 접두사로 해시를 생성하고, 기존 해시에 대해 비밀번호를 검증하며, 해시의 구조를 읽는 데 사용하세요. 다른 보안 도구와도 자연스럽게 어울립니다. htpasswd 생성기(bcrypt 항목을 직접 출력할 수 있습니다)로 HTTP Basic Auth를 통해 디렉터리를 보호하고, 무작위 비밀번호 생성기로 해시할 강력한 비밀번호를 만들며, 느린 비밀번호 해시가 아니라 빠른 범용 체크섬이 필요할 때는 SHA-256 생성기를 사용하세요. 비밀번호를 어떤 알고리즘으로 저장할지 결정 중이라면 bcrypt vs Argon2 vs scrypt에서 선택지를 비교해 보세요.
// Node.js — bcryptjs / bcrypt (emits $2b$)
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash('correct horse battery staple', 12);
// -> $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
const ok = await bcrypt.compare('correct horse battery staple', hash); // true
# Python — bcrypt
import bcrypt
hashed = bcrypt.hashpw(b'correct horse battery staple', bcrypt.gensalt(12))
bcrypt.checkpw(b'correct horse battery staple', hashed) # True
# PHP — password_hash (emits $2y$)
$hash = password_hash('correct horse battery staple', PASSWORD_BCRYPT, ['cost' => 12]);
password_verify('correct horse battery staple', $hash); // true
# Apache htpasswd CLI — bcrypt entry to stdout (-B bcrypt, -b inline, -n stdout)
htpasswd -Bbn admin 'correct horse battery staple'
# -> admin:$2y$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq 주요 기능
Bcrypt 해시 생성
어떤 비밀번호든 새로운 무작위 솔트와 함께 표준 60자 bcrypt 해시를 생성합니다. 클릭할 때마다 실제 비밀번호 저장소가 그러하듯 서로 다른 유효한 해시가 만들어집니다.
조절 가능한 비용 인자
작업 인자를 4부터 15까지 조정하세요(12가 오늘날의 기본값). 각 단계가 계산 시간을 대략 두 배로 늘리는 것을 체감하며, 강력하면서도 로그인에 충분히 빠른 비용을 선택할 수 있습니다.
버전 접두사 선택
$2b$(현재 bcryptjs 표준), $2y$(PHP / Apache htpasswd), $2a$(원본) 중에서 출력하세요. 모두 라이브러리 간 검증에서 서로 호환됩니다.
해시에 대한 비밀번호 검증
저장된 해시와 후보 비밀번호를 붙여 넣으면 일치 여부를 즉시 확인합니다 — 복호화하지 않고 포함된 솔트와 비용으로 다시 해시합니다. 실패한 로그인 디버깅에 이상적입니다.
해시 구조 분석
어떤 bcrypt 해시든 버전·비용·솔트·다이제스트로 분리해 보여주므로, $2b$12$... 문자열의 구조를 한눈에 알 수 있습니다.
100% 클라이언트 측 실행
모든 해싱과 검증이 브라우저 안에서 로컬로 이루어집니다. 비밀번호나 해시는 절대 서버로 전송되지 않으므로, 실제 자격 증명도 비공개로 다룰 수 있습니다.
Bcrypt 생성기 예시
bcrypt 해시 (비용 12, $2b$)
password: correct horse battery staple cost: 12 prefix: $2b$
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
$2b$ 접두사로 비용 12에서 생성한 bcrypt 해시입니다. 솔트가 무작위이므로 같은 비밀번호라도 매번 다른 해시가 만들어지지만, 그 모든 해시는 원래 비밀번호에 대해 검증됩니다.
비밀번호를 해시에 대해 검증하기
password: correct horse battery staple hash: $2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
✓ Match — the password is correct for this hash
검증은 해시를 복호화하지 않습니다. bcrypt는 저장된 해시에 포함된 솔트와 비용을 사용해 후보 비밀번호를 다시 해시한 뒤 그 결과를 비교합니다. 일치하면 비밀번호가 올바른 것입니다.
해시 구조 분석
$2b$12$dUSFKqT1FCMYZ6hcQfsxuONizEqcX8IGK8snfVSowP5Uu.TDJoPUq
version: $2b$ · cost: 12 · salt: dUSFKqT1FCMYZ6hcQfsxuO · digest: NizEqcX8IGK8snfVSowP5Uu.TDJoPUq
모든 bcrypt 해시는 자기 기술적입니다. 버전 태그, 두 자리 비용, 22자 Base64 솔트, 31자 Base64 다이제스트가 하나의 60자 문자열에 모두 담겨 있습니다. 이 도구는 이를 분리해 한눈에 읽을 수 있게 보여줍니다.
Bcrypt 생성기 사용법
- 1
비밀번호 입력 및 비용 선택
생성 탭에서 비밀번호를 입력하거나 무작위 비밀번호를 클릭하세요. 비용 인자(4~15, 12가 오늘날의 기본값)와 버전 접두사 — $2b$, $2a$, $2y$ — 를 사용 환경에 맞게 선택합니다.
- 2
해시 생성
bcrypt 해시는 새로운 무작위 솔트와 함께 로컬에서 계산되어 단일 60자 $2b$12$... 문자열로 나타납니다. 복사를 클릭해 가져오거나, 다시 생성해 새로 솔트된 해시를 얻으세요.
- 3
구조 읽기 또는 검증
구조 패널은 해시를 버전·비용·솔트·다이제스트로 분리합니다. 검증 탭으로 전환해 저장된 해시와 비밀번호를 붙여 넣으면 일치 여부를 즉시 확인할 수 있습니다.
Common Errors
해시를 복호화하려 시도하기
Bcrypt는 단방향이라 복호화가 없습니다. 비밀번호를 확인하려면 다이제스트를 되돌리려 하지 말고 해시에 대해 검증하세요.
bcrypt.decrypt(hash) // no such operation
bcrypt.compare(password, hash) // returns true / false
비용을 너무 낮게 설정하기
비용 4나 6처럼 낮으면 거의 즉시 해시되는데, 이는 공격자가 유출된 해시를 빠르게 무차별 대입할 수 있게 해줍니다. 12를 기준선으로 사용하세요.
cost: 4 // far too fast, weak against brute force
cost: 12 // modern default, resists brute force
같은 해시가 두 번 나올 것이라 기대하기
솔트가 무작위이므로 같은 비밀번호를 다시 해시하면 다른 문자열이 나옵니다. 두 해시의 바이트 일치를 확인하지 말고 검증으로 비교하세요.
hash(pw) === storedHash // fails — different salts
bcrypt.compare(pw, storedHash) // correct check
일반적인 사용 사례
- 데이터베이스에 비밀번호 해시 시드하기
- 관리자 또는 테스트 계정용 bcrypt 해시를 생성해 users 테이블에 직접 삽입하면, 전체 가입 흐름을 먼저 구성하지 않고도 로그인할 수 있습니다.
- 실패하는 로그인 디버깅
- 정상적인 비밀번호를 저장된 해시에 대해 검증해 해시 자체가 올바른지 확인함으로써, 인증 코드와 버그를 분리해 낼 수 있습니다.
- 적절한 비용 인자 선택
- 여러 비용 수준으로 직접 하드웨어에서 생성해 각각 얼마나 걸리는지 체감한 뒤, 실제 로그인을 늦추지 않으면서 무차별 대입에 견디는 작업 인자를 선택하세요.
- htpasswd / Basic Auth 항목 생성
- Apache, Docker Registry, Caddy 자격 증명용 $2y$ bcrypt 해시를 생성한 뒤, HTTP Basic Auth를 위한 user:hash 줄에 넣으세요.
- 테스트 픽스처 구축
- 비밀번호별로 결정적인 bcrypt 해시를 만들어, 실제 인증 서버를 띄우지 않고도 로그인 또는 비밀번호 재설정 흐름의 통합 테스트를 시드하세요.
- 발견한 해시 감사하기
- 설정 파일이나 덤프에 있는 bcrypt 문자열의 구조를 읽어 비용 인자를 확인하고, 예상한 비밀번호에 대해 검증해 일치를 확인하세요.
기술 세부 정보
- Blowfish 기반, 적응형 비용
- Bcrypt는 Blowfish 암호의 비싼 키 설정에서 해시를 유도하며, 이를 2^비용 번 반복합니다. 비용을 1 올리면 작업량이 두 배가 되어, 하드웨어가 발전해도 함수가 무차별 대입에 대해 계속 느리게 유지됩니다.
- 128비트 무작위 솔트
- 각 해시는 16바이트(128비트) 무작위 솔트를 포함하며, 비용 다음에 22자로 Base64 인코딩됩니다. 솔트는 모든 해시를 고유하게 만들어, 동일한 비밀번호라도 다이제스트를 공유하지 않고 레인보우 테이블이 통하지 않게 합니다.
- 자기 기술적인 60자 형식
- 출력은 $버전$비용$솔트+다이제스트 — 검증에 필요한 모든 것을 담은 고정 60자 문자열입니다. 별도의 솔트 열이나 매개변수 저장소가 필요하지 않습니다.
- 72바이트 비밀번호 제한
- Bcrypt는 비밀번호의 처음 72바이트만 해시하며, 그 이후는 조용히 무시됩니다. 매우 긴 패스프레이즈의 경우 bcrypt 전에 미리 해시(예: SHA-256)하는 것이 흔한 완화책입니다.
- 복호화가 아니라 검증
- Bcrypt는 단방향입니다. 검증은 저장된 해시에서 파싱한 솔트와 비용을 사용해 후보 비밀번호에 대해 해시를 다시 실행한 뒤, 다이제스트를 상수 시간으로 비교합니다. 평문을 복구하는 연산은 존재하지 않습니다.
- 정직성 참고 및 주의사항
- 해시는 로컬에서 계산되며 실제 시스템과 대조되지 않습니다. 복사한 해시와 입력한 모든 비밀번호는 클립보드와 브라우저 메모리에 남으므로 — 비밀로 취급하고, 운영 환경에 붙여 넣은 뒤에는 클립보드를 비우세요.
모범 사례
- 비용 12 이상 사용
- 비용 12는 오늘날의 기준선입니다. 로그인 지연이 허용 범위에 머무는 한 민감한 시스템에서는 14까지 올리세요. 주기적으로 재평가하세요 — 5년 전에 충분히 느렸던 것이 오늘은 공격하기 저렴합니다.
- 평문을 절대 저장하거나 로깅하지 않기
- 원래 비밀번호가 아니라 bcrypt 해시만 저장하고, 비밀번호를 로그와 오류 메시지에서 배제하세요. 평문이 함께 유출되면 bcrypt의 가치는 모두 사라집니다.
- 솔트는 bcrypt에 맡기기
- Bcrypt가 안전한 무작위 솔트를 생성해 포함시켜 줍니다. 직접 만든 고정 솔트를 제공하거나 재사용하지 마세요 — 해시마다의 무작위 솔트가 바로 레인보우 테이블을 무력화하는 요소입니다.
- 72바이트 제한 유의
- 긴 패스프레이즈를 허용한다면 bcrypt가 72바이트 이후를 무시한다는 점을 기억하세요. 매우 긴 입력을 완전히 다뤄야 한다면 SHA-256으로 미리 해시하거나 Argon2id를 검토하세요.
Bcrypt 생성기 FAQ
온라인 bcrypt 생성기를 사용해도 안전한가요?
온라인으로 bcrypt 해시를 어떻게 생성하나요?
$2b$, PHP와 Apache에는 $2y$, 원래 식별자에는 $2a$를 사용합니다. bcrypt 해시는 새로운 무작위 솔트와 함께 브라우저에서 즉시 계산되어, 한 번의 클릭으로 복사할 수 있는 단일 60자 $2b$12$... 문자열로 나타납니다. 업로드되는 것은 아무것도 없습니다. 비밀번호와 해시는 사용자 기기를 절대 벗어나지 않습니다. 각 해시가 서로 다른 무작위 솔트를 담으므로, 같은 비밀번호에 대한 또 다른 유효한 해시를 얻으려면 언제든 다시 생성하세요. bcrypt 해시를 복호화하거나 되돌릴 수 있나요?
어떤 비용 인자(작업 인자)를 사용해야 하나요?
$2a$, $2b$, $2y$의 차이는 무엇인가요?
$2a$는 원래 널리 쓰이던 식별자이고, $2b$는 bcryptjs 라이브러리와 대부분의 최신 구현이 출력하는 수정된 현재 버전이며, $2y$는 PHP와 Apache htpasswd가 사용하는 식별자입니다. 검증 측면에서는 서로 호환됩니다 — 여기서 어떤 접두사로 생성한 해시든 모든 라이브러리에서 올바르게 검증되는데, 이들이 모두 같은 핵심 함수를 실행하기 때문입니다. 바이트 단위 호환성이 필요하다면 사용 환경이 요구하는 접두사를 선택하세요. bcrypt 해시에 대해 비밀번호를 어떻게 검증하나요?
$2b$12$... 문자열)와 후보 비밀번호를 붙여 넣으면, 도구가 즉시 일치 여부를 알려줍니다. 작동 방식은 해시에 포함된 솔트와 비용을 추출하고 그 정확한 매개변수로 후보 비밀번호를 다시 해시한 뒤, 새 다이제스트를 저장된 것과 비교하는 것입니다 — 복호화는 전혀 일어나지 않습니다. 이것이 로그인 시스템이 비밀번호를 확인하는 방식입니다. 평문을 복구하는 것이 아니라, 제출된 비밀번호를 다시 해시했을 때 저장된 해시가 재현되는지만 확인합니다. bcrypt vs Argon2 vs scrypt — 무엇을 써야 하나요?
왜 bcrypt 해시가 매번 다른가요?
관련 도구
모든 도구 보기 →JWT 디코더 (JWT Decoder)
보안 도구
무료 JWT 디코더로 JWT 토큰을 온라인에서 즉시 디코딩. 헤더, 페이로드, 서명, 만료, 클레임 확인. 100% 브라우저 기반 — 토큰이 기기를 떠나지 않음. 가입·추적 없음.
JWT 인코더 (JWT Encoder)
보안 도구
무료 온라인 JWT 생성기·인코더. 헤더와 페이로드를 구성하고 HS256, RS256, ES256으로 즉시 서명. 100% 브라우저 기반 — 비밀 키와 개인 키가 기기를 떠나지 않음.
MD5 해시 생성기 · 파일 체크섬 도구
보안 도구
MD5, SHA-256, SHA-1, SHA-512 해시를 온라인에서 무료로 생성합니다. 브라우저에서 텍스트나 파일을 해싱하고 체크섬을 검증하며 결과를 복사할 수 있습니다.
무작위 비밀번호 생성기 (Random Password Generator)
보안 도구
강력한 무작위 비밀번호를 즉시 만드는 무료 온라인 도구. 길이와 문자 종류를 지정해 최대 50개까지 일괄 생성하고 엔트로피 분석을 확인할 수 있습니다.
SHA-1 해시 생성기 (160비트 레거시)
보안 도구
SHA-1 해시를 브라우저에서 무료로 생성합니다. 40자리 16진수 출력, 업로드 없음. Git 지문 조회, 구형 인증서 검사, 마이그레이션 감사용 레거시 도구입니다.
SHA-256 해시 생성기 및 체크섬 도구
보안 도구
SHA-256 해시를 브라우저에서 생성·검증합니다. 64자리 16진수 출력, 파일·텍스트 지원. 가입 불필요, 데이터 미전송.