Oh MyUtils

Bcrypt 해시 생성기 - Bcrypt 해시 생성 및 검증 온라인

설정 가능한 비용 인수로 bcrypt 비밀번호 해시를 생성하고 기존 bcrypt 해시에 대해 평문을 검증합니다. 100% 클라이언트 사이드, 비밀번호가 브라우저를 떠나지 않습니다.

예상 시간: ~100ms
41610
높음

프로덕션 사용에 권장

자주 묻는 질문

bcrypt란 무엇이며 왜 비밀번호 해싱에 사용되나요?

Bcrypt는 1999년 Niels Provos와 David Mazieres가 Blowfish 암호를 기반으로 설계한 비밀번호 해싱 함수입니다. SHA-256과 같은 범용 해시 함수와 달리 bcrypt는 비밀번호 저장을 위해 특별히 설계되었습니다. 레인보우 테이블 공격을 방지하기 위한 내장 솔트와 시간이 지남에 따라 증가하는 컴퓨팅 성능에 맞출 수 있는 적응형 비용 인수를 포함합니다. 이로 인해 bcrypt는 의도적으로 느리며, 이는 현대 하드웨어로도 무차별 대입 공격을 비실용적으로 만드는 기능입니다.

이 bcrypt 해시 생성기는 어떻게 사용하나요?

1. 생성 탭으로 전환합니다. 2. 입력 필드에 비밀번호나 텍스트를 입력합니다. 3. 비용 인수(라운드) 슬라이더를 조정합니다 — 기본값은 10, 프로덕션에서는 12+ 권장. 4. 해시 생성 버튼을 클릭하고 계산이 완료될 때까지 기다립니다. 5. 복사 버튼을 사용하여 생성된 60자 bcrypt 해시를 복사합니다. 6. 비밀번호를 검증하려면 검증 탭으로 전환하여 bcrypt 해시를 붙여넣고 테스트할 평문을 입력합니다.

제 비밀번호는 안전한가요? 서버로 전송되나요?

비밀번호는 100% 안전하며 브라우저를 떠나지 않습니다. 이 도구는 bcryptjs JavaScript 라이브러리를 사용하여 모든 bcrypt 작업을 전적으로 사용자의 기기에서 수행합니다. 비밀번호 데이터, 평문 또는 생성된 해시가 서버로 전송되거나 데이터베이스에 저장되거나 어디에도 기록되지 않습니다. 인터넷을 끊어서 확인할 수 있습니다 — 초기 페이지 로드 후 완전히 오프라인으로 작동합니다.

어떤 비용 인수(라운드)를 사용해야 하나요?

비용 인수는 bcrypt가 수행하는 반복 횟수(2^rounds)를 결정합니다. 높은 값은 더 안전하지만 느립니다. 권장 사항: 4-7은 테스트 및 개발 전용으로 프로덕션에서 사용하면 안 됩니다. 8-9는 높은 처리량이 필요한 낮은 보안 애플리케이션에 적합합니다. 10은 기본값으로 많은 애플리케이션에서 최소 허용 가능합니다. 12는 프로덕션 사용을 위한 권장 최소값입니다. 14+는 느린 해시 시간이 허용되는 높은 보안 애플리케이션에 적합합니다.

같은 비밀번호가 매번 다른 bcrypt 해시를 생성하는 이유는 무엇인가요?

Bcrypt는 각 해시 작업마다 고유한 128비트 랜덤 솔트를 자동으로 생성합니다. 이 솔트는 해시에 통합되어 출력 문자열의 일부로 저장됩니다. 같은 비밀번호를 두 번 해시하면 다른 솔트가 사용되어 다른 해시 출력이 생성됩니다. 이는 의도된 설계로 레인보우 테이블 공격을 방지하며, 데이터베이스에 저장된 동일한 비밀번호도 다른 해시를 갖게 됩니다. 검증 시 bcrypt는 저장된 해시에서 솔트를 추출하여 다시 계산하고 비교합니다.

비밀번호 해싱에서 bcrypt와 SHA-256의 차이점은 무엇인가요?

SHA-256은 빠르게 설계된 범용 암호화 해시 함수이고, bcrypt는 비밀번호 해싱을 위해 특별히 설계되어 의도적으로 느립니다. SHA-256은 최신 GPU에서 초당 수십억 개의 해시를 계산할 수 있어 무차별 대입 공격이 가능합니다. Bcrypt의 조정 가능한 비용 인수는 공격자를 초당 수천 개의 해시(rounds=12)로 제한하여 무차별 대입을 비실용적으로 만듭니다. 또한 bcrypt는 자동 솔팅을 포함하지만 SHA-256은 수동 솔트 관리가 필요합니다.

이 도구를 프로덕션 비밀번호 해싱에 사용할 수 있나요?

이 도구는 테스트, 학습 및 개발 목적으로 설계되었습니다. bcryptjs 라이브러리가 유효한 표준 호환 bcrypt 해시를 생성하지만, 프로덕션 비밀번호 해싱은 애플리케이션 코드 내에서 서버 사이드로 수행해야 합니다. 프로덕션에서 클라이언트 사이드로 비밀번호를 해싱하지 마세요 — 가로채면 해시 자체가 자격 증명이 됩니다. 이 도구를 사용하여 테스트 해시를 생성하고, 기존 해시를 검증하고, bcrypt 매개변수를 학습하고, 애플리케이션에 적절한 비용 인수를 결정하세요.

코드 예제

const bcrypt = require('bcryptjs');

// Generate a bcrypt hash
async function hashPassword(password, rounds = 12) {
  const salt = await bcrypt.genSalt(rounds);
  const hash = await bcrypt.hash(password, salt);
  return hash;
}

// Verify a password against a hash
async function verifyPassword(password, hash) {
  const isMatch = await bcrypt.compare(password, hash);
  return isMatch;
}

// Parse bcrypt hash components
function parseBcryptHash(hash) {
  const match = hash.match(/^\$(\w+)\$(\d{2})\$(.{22})(.{31})$/);
  if (!match) return null;

  return {
    version: match[1],
    rounds: parseInt(match[2], 10),
    salt: match[3],
    hash: match[4],
  };
}

// Example usage
(async () => {
  const password = 'MySecurePassword123!';
  const hash = await hashPassword(password, 12);
  console.log('Hash:', hash);

  const isValid = await verifyPassword(password, hash);
  console.log('Valid:', isValid); // true

  const parsed = parseBcryptHash(hash);
  console.log('Parsed:', parsed);
})();

관련 도구