bcrypt 비밀번호 해시 생성 방법
비밀번호와 비용 라운드 수를 사용해 bcrypt 해시를 생성할 수 있습니다. 비밀번호를 비워 두면 빈 해시와 빈 솔트 값이 반환되고, 라운드를 생략하면 12가 적용됩니다.
bcrypt 해시를 생성하기 전에 알아둘 점
비밀번호를 그대로 다루지 않고 bcrypt 형식의 해시로 변환해야 할 때 이 도구를 사용할 수 있습니다. 입력할 수 있는 값은 비밀번호와 비용 라운드 수입니다. 두 입력 모두 선택 사항이므로, 값을 넣을지 생략할지 먼저 정하면 됩니다. 비밀번호를 입력하면 도구는 해당 값을 UTF-8로 처리하고 새로운 솔트를 만든 뒤 bcrypt 해시를 생성합니다.
비용 라운드 수는 해시 생성 과정에 적용되는 입력값입니다. 생략하면 12가 사용됩니다. 같은 비밀번호와 같은 라운드 수를 다시 사용해도 결과가 달라질 수 있습니다. 생성할 때마다 새로운 솔트가 만들어지기 때문입니다. 따라서 이전 결과와 문자열이 다르다는 사실만으로 입력이 잘못되었다고 판단해서는 안 됩니다.
빈 비밀번호는 별도로 구분해야 하는 경우입니다. 비밀번호 입력이 비어 있으면 계산은 성공하지만, 일반적인 비밀번호 해시가 아니라 bcrypt와 연결된 빈 해시와 빈 솔트 값이 반환됩니다. 그러므로 실제 비밀번호를 처리하려는 경우에는 입력란이 비어 있는지 결과를 확인하기 전에 살펴보는 편이 좋습니다. 이 예외를 모른 채 빈 입력으로 생성한 결과를 정상적인 비밀번호 해시로 해석하면 안 됩니다.
bcrypt 해시를 생성하는 방법
-
해시로 변환할 비밀번호를 입력란에 입력합니다. 비밀번호 입력은 선택 사항이지만, 생략하면 계산 결과의 의미가 달라집니다. 빈 입력에서는 일반적인 bcrypt 비밀번호 해시가 생성되지 않고 빈 해시와 솔트 값이 반환됩니다. 따라서 실제 값으로 결과를 확인하려면 비어 있지 않은 비밀번호를 입력해야 합니다. 예시를 사용할 때에는 실제 계정의 비밀번호를 그대로 사용하지 않는 방식으로 확인 절차를 정하는 것이 좋습니다.
-
비용 라운드 입력란에 값을 입력하거나 그대로 둡니다. 입력하지 않으면 12가 기본값으로 적용됩니다. 비밀번호가 비어 있지 않은 경우 입력한 라운드 값은 정수로 변환된 다음 10 이상 15 이하의 범위로 제한됩니다. 이 처리는 해시 생성 전에 이루어지므로, 입력한 숫자가 범위 밖에 있다면 실제 생성에 사용된 값이 입력값과 다를 수 있습니다. 어떤 값을 적용했는지 기록해야 하는 상황이라면 입력값과 결과를 함께 확인하십시오.
-
생성 동작을 선택해 결과를 확인합니다. 비밀번호와 라운드 입력을 바탕으로 bcrypt 해시가 만들어지면 해시와 솔트에 해당하는 결과가 표시됩니다. 비밀번호가 비어 있으면 앞에서 설명한 빈 해시와 빈 솔트 값이 반환됩니다. 결과의 형태를 확인할 때에는 값이 표시되었는지만 보지 말고, 입력 비밀번호가 비어 있었는지도 함께 확인해야 합니다.
-
라운드 입력을 숫자로 바꿀 수 없거나 bcrypt 생성 과정에서 TypeError 또는 ValueError가 발생하면 성공한 해시 대신 실패 결과가 보고될 수 있습니다. 이 경우 라운드 입력이 정수로 해석될 수 있는지 확인하고 다시 시도합니다. 비밀번호를 비워 두었을 때의 빈 결과와 생성 실패는 서로 다른 상황이므로 구분해야 합니다. 빈 비밀번호는 계산 성공의 예외이고, 변환 또는 생성 오류는 실패 결과로 처리되는 경우입니다.
-
애플리케이션에 결과를 적용하기 전에는 결과가 어떤 형식으로 소비되는지 확인합니다. 같은 비밀번호를 같은 라운드로 처리해도 새 솔트 때문에 해시가 달라질 수 있으므로, 두 결과가 문자 그대로 같은지 비교하는 방식은 적절하지 않을 수 있습니다. 결과를 비교해야 한다면 원래 비밀번호를 사용한 bcrypt 검증에서 대응 여부를 확인하는 절차를 사용해야 합니다. 이 도구가 수행하는 것으로 확인된 기능은 bcrypt 해시 생성이므로, 검증 과정 자체를 이 도구의 기능이라고 간주해서는 안 됩니다.
결과를 해석하는 방법과 한계
성공한 비밀번호 입력은 UTF-8로 처리된 뒤 새로운 솔트와 함께 bcrypt 해시로 변환됩니다. 결과에는 해시와 솔트에 해당하는 값이 포함되므로, 입력한 비밀번호가 결과에 그대로 나타나는 형태를 기대해서는 안 됩니다. 비용 라운드를 생략했다면 12가 사용되고, 비밀번호가 비어 있지 않다면 입력한 라운드 값이 정수로 변환된 뒤 10부터 15까지의 범위에 맞춰집니다.
같은 비밀번호와 같은 라운드 수에서 서로 다른 해시가 나오는 것은 새 솔트가 생성되기 때문일 수 있습니다. 해시 문자열의 일치 여부만으로 두 입력이 같은지 판단하지 말고, 원래 비밀번호를 사용한 bcrypt 검증에서 해당 비밀번호와 해시가 대응하는지 확인해야 합니다. 이 검증은 생성된 해시를 확인하는 방법에 관한 설명이며, 이 도구가 비밀번호 검증을 수행한다는 뜻은 아닙니다.
반대로 빈 해시와 빈 솔트 값은 빈 비밀번호 입력에 따른 성공 결과입니다. 이를 일반적인 비밀번호 해시로 저장하거나 해석할지는 이 도구의 결과만으로 결정할 수 없습니다. 라운드 변환 또는 bcrypt 생성 과정에서 TypeError나 ValueError가 발생한 경우에는 성공 결과가 아니라 실패 결과가 보고될 수 있으므로, 결과를 해시 문자열로 간주하기 전에 처리 상태를 확인해야 합니다.
이 도구는 네트워크를 사용하지 않는다고 선언되어 있습니다. 그러나 그 선언만으로 비밀번호, 해시 또는 다른 입력이 저장되거나 기록되거나 공유되지 않는다고 판단할 수는 없습니다. 실행 환경과 데이터 처리 방식에 관한 별도의 정보가 없다면, 입력값을 실제 운영 비밀번호로 사용할지 여부는 해당 환경의 저장 및 접근 정책을 확인한 뒤 정해야 합니다. 또한 확인된 기능 범위에는 비밀번호 복구, 강도 평가, 크래킹, 복호화가 포함되지 않습니다.
사용 예시
애플리케이션 로그인 저장 형식을 점검하는 담당자가 비용 라운드 12로 테스트용 비밀번호를 두 번 처리해 결과 형태와 변동 여부를 확인합니다.
로그인 저장 형식을 점검하는 담당자가 테스트용 비밀번호를 입력하고 비용 라운드에 12를 입력해 생성합니다. 같은 입력으로 한 번 더 생성한 뒤 두 해시가 달라도 새 솔트에 따른 결과인지 bcrypt 검증으로 확인합니다.
비밀번호 입력란에 값이 있고 비용 라운드에 12를 사용하면 bcrypt 해시와 솔트에 해당하는 결과가 표시됩니다. 같은 입력을 다시 처리하면 새 솔트 때문에 다른 해시가 나올 수 있으며, 원래 비밀번호를 사용한 bcrypt 검증에서 대응 여부를 확인할 수 있습니다.
제한 사항
- 네트워크를 사용하지 않는다고 선언되어 있지만, 이 정보만으로 비밀번호나 해시의 저장·기록·공유 여부를 판단할 수는 없습니다.
자주 발생하는 오류
- 라운드 입력을 정수로 변환할 수 없거나 bcrypt 생성 과정에서 TypeError 또는 ValueError가 발생하면 실패 결과가 보고될 수 있습니다. 라운드란에 정수로 해석할 수 있는 값을 입력하고, 실패 결과를 성공한 해시로 사용하지 않은 채 다시 생성하십시오.
자주 묻는 질문
비밀번호를 입력하지 않아도 되나요?
비밀번호 입력은 선택 사항입니다. 다만 입력이 비어 있으면 일반적인 비밀번호 해시가 아니라 bcrypt와 연결된 빈 해시와 빈 솔트 값이 반환됩니다.
비용 라운드는 생략할 수 있나요?
비용 라운드를 입력하지 않으면 12가 사용됩니다. 비밀번호가 비어 있지 않을 때 입력한 값은 정수로 변환된 뒤 10 이상 15 이하의 범위로 제한됩니다.
같은 비밀번호인데 해시가 매번 다른 이유는 무엇인가요?
같은 비밀번호와 같은 라운드 수라도 다시 생성할 때 새 솔트가 만들어져 해시가 달라질 수 있습니다. 대응 여부는 원래 비밀번호를 사용한 bcrypt 검증으로 확인할 수 있으며, 이 현상만으로 생성 실패라고 판단해서는 안 됩니다.