bcrypt 해시 및 검증
암호bcrypt(적응형 cost)로 비밀번호를 해시하거나, 평문이 기존 $2a$ / $2b$ 해시와 일치하는지 검증합니다. cost 조절 및 소요 시간 보정, 모두 브라우저 안에서 처리됩니다.
원격 URL은 가져오지 않습니다. JSON을 직접 붙여넣으세요.
⚠ cost가 높을수록 느리고 안전
이 페이지에서
bcrypt란?#
bcrypt는 의도적으로 느리게 만들어진 비밀번호 해시 함수입니다. SHA-256 같은 빠른 해시가 초당 수 메가바이트를 처리하도록 설계된 반면, bcrypt는 추측 한 번당 실제 시간이 들도록 설계되었습니다. 그래서 비밀번호 해시 데이터베이스를 훔친 공격자가 값싸게 수십억 번의 추측을 시도할 수 없습니다. “사용자 비밀번호를 어떻게 저장해야 하는가”에 대한 표준 답이 bcrypt입니다. 평문 SHA-256이 아니라 bcrypt로 해시하세요.
bcrypt를 그 용도에 맞게 만드는 두 가지가 있습니다. 첫째, 조정 가능한 cost 인수 가 있어 작업량을 지수적으로 조절합니다. cost를 1 올리면 해시당 시간이 대략 두 배가 되므로, 다이얼을 돌려 하드웨어를 앞지를 수 있습니다. 둘째, 모든 해시에 무작위 솔트 를 구워 넣어, 같은 비밀번호가 완전히 다른 값으로 해싱되며 한 데이터베이스를 위해 만든 미리 계산된 표가 다른 데이터베이스에는 쓸모 없게 됩니다. 솔트와 cost는 모두 출력 문자열 안에 실려 나오므로 검증에는 비밀번호와 해시 외에 아무것도 필요 없습니다.
이 페이지는 두 연산을 모두 합니다. 비밀번호를 bcrypt 문자열로 해시 하고, 기존 해시에 대해 비밀번호를 검증 합니다. 페이지의 응답성을 유지하기 위해 cost 12 이상의 해싱은 Web Worker로 옮겨져, 무거운 연산이 인터페이스를 멈추는 일이 없습니다.
사용 방법#
- 모드 를 고르세요. 해시 (비밀번호에서 bcrypt 문자열 만들기) 또는 검증 (기존 해시에 대해 비밀번호 확인).
- 비밀번호 를 타이핑하세요. 타이핑하는 동안 드러내려면 눈 아이콘을 누르세요. 기본적으로 가려집니다. 이모지와 비-라틴 문자를 포함한 UTF-8을 받습니다.
- 해시 모드에서 cost 슬라이더(4–14, 기본 12)를 설정하세요. 높일수록 느리고 강해집니다. 눈에 띄는 시간이 걸릴 만큼 cost가 높아지면 경고가 나타납니다.
- 검증 모드에서, 나타나는 필드에 기존 해시 를 붙여넣으세요. cost는 해시 자체에서 자동으로 읽힙니다. 사용자가 설정하지 않습니다.
- 기본 버튼을 누르세요. 해시 모드의 출력은 bcrypt 문자열입니다. 검증 모드의 출력은 명확한 일치 / 불일치 판정이며, 여러분의 하드웨어에서 cost를 가늠하게 해 주는 경과 시간 표시가 곁들여집니다.
주요 기능#
- 조정 가능한 cost, 4–14. 기본값 12가 현대적 권장값입니다. 각 단계마다 작업량이 대략 두 배가 되어, 세월이 흐르며 더 빠른 하드웨어를 따라잡을 수 있습니다.
- 높은 cost에서 워커 오프로드. cost 12 이상은 Web Worker에서 실행되어 페이지가 응답성을 유지합니다. 워커가 막혀 있으면 같은 결과로 메인 스레드로 투명하게 폴백합니다.
- 내장 솔트. 모든 해시는 출력에 인코딩된 새로운 무작위 솔트를 받아, 같은 비밀번호가 두 번 같은 문자열로 해시되는 일이 없습니다.
- 자동 cost로 검증. cost 인수는 붙여넣은 해시에서 파싱되어, 비밀번호가 해시된 방식과 검사되는 방식 사이에 어긋남이 없습니다.
- 업로드 없음. 해싱과 검증은 로컬에서 일어납니다. 비밀번호는 결코 페이지를 떠나지 않습니다.
실전 예시#
아래는 이 페이지에서 직접 만든, cost 12 인 hunter2 의 실제 해시입니다. 솔트가 새로 무작위화되므로 hunter2 를 다시 해싱하면 다른 문자열을 얻지만, 이것은 진짜이며 검증 가능합니다. 검증 모드에 이것을 붙여넣고 hunter2 를 타이핑하면 판정은 일치 입니다.
$2b$12$DG/IWIDBmJlywamLdGno2.guEH5lGnQ1OTULdIGN8BH1vqiLIGzjy
필드별로 읽어 보세요.
$2b$— bcrypt 변형(bcryptjs는$2b$을 내보내고, 검증은$2a$,$2x$,$2y$도 받습니다).12— cost 인수, 곧2^12회의 키 확장 라운드.- 다음 22글자 — 무작위 솔트.
- 마지막 31글자 — 파생된 해시.
검증 으로 전환하고, 위 해시를 기존 해시 필드에 떨어뜨리고, hunter2 를 타이핑하면 판정은 일치 입니다. 대신 Hunter2 를 타이핑하면 불일치 입니다. bcrypt는 대소문자를 구분하며, 잘못된 글자 하나가 결과를 뒤집습니다. 곁들여 표시되는 경과 시간은 여러분의 기기에서 cost 12일 때 검증 한 번의 실제 비용입니다.
FAQ#
cost는 얼마로 해야 하나요?#
오늘날 새 시스템의 기본값으로 12가 좋습니다. 전형적인 하드웨어에서 대략 수백 밀리초가 걸려, 실제 로그인에는 고통스럽지 않지만 일괄 추측에는 고통스럽습니다. 살짝 느린 로그인을 감당할 수 있는 고가치 대상에는 13이나 14로 올리세요. 핵심 규칙은 하드웨어가 빨라지는 세월에 따라 위로 다시 조율하는 것입니다. bcrypt의 cost는 지수적으로 조절되어 1 올릴 때마다 시간이 대략 두 배가 됩니다.
같은 비밀번호를 두 번 해싱하면 왜 다른 결과가 나오나요?#
bcrypt가 매번 새로운 무작위 솔트를 만들어 출력에 심어 넣기 때문입니다. 두 해시는 전혀 달라 보이지만 둘 다 같은 비밀번호에 대해 검증됩니다. 솔팅의 요점 그 자체입니다. 반복되는 비밀번호를 알아채거나 미리 계산된 표를 재사용하는 공격을 막습니다.
다른 곳에서 만든 해시를 검증할 수 있나요?#
그렇습니다. 잘 형성된 bcrypt 문자열($2a$, $2b$, $2x$, $2y$)이라면 됩니다. 검증 모드의 기존 해시 필드에 붙여넣으세요. 도구는 해시 자체에서 cost와 솔트를 읽습니다. Node의 bcrypt, PHP의 password_hash, Python의 passlib에서 내보낸 해시가 모두 여기서 동작합니다.
비밀번호에는 bcrypt가 SHA-256보다 나은가요?#
로그인 비밀번호 저장에는 그렇습니다, 강력하게. SHA-256은 빠르며, 이는 저장된 비밀번호 해시로서 정확히 잘못된 속성입니다. 해시를 가진 공격자가 GPU에서 초당 수십억 번의 추측을 시도할 수 있습니다. bcrypt는 의도적으로 느리고 솔트가 있어, 비밀번호 저장이 요구하는 바로 그것입니다. 무결성과 서명에는 SHA-256을, 사람의 비밀번호에는 bcrypt(또는 그 사촌인 Argon2/scrypt)를 쓰세요.