이 도구에 대하여
Apache 또는 nginx HTTP 기본 인증을 위한 바로 붙여넣을 수 있는 .htpasswd 자격 증명 줄(username:hash)을 생성합니다. 사용자 이름, 비밀번호, 해싱 모두 브라우저에서 로컬로 이루어집니다 — 아무것도 업로드되지 않으며 eval이나 외부 라이브러리가 없습니다.
두 가지 알고리즘을 지원합니다. APR1-MD5(Apache $apr1$ 형식)는 자체 완결형 MD5와 완전한 1000회 솔트 crypt 루프를 포함해 순수 JavaScript로 구현되며, crypto.getRandomValues에서 뽑은 8자 무작위 솔트를 사용합니다. SHA-1은 브라우저 내장 crypto.subtle.digest를 사용해 base64로 인코딩하고 {SHA}를 접두사로 붙이며, htpasswd -s 출력과 일치합니다. Bcrypt는 정확하고 빠른 순수 JS bcrypt를 클라이언트 측에서 실행하기가 비현실적이므로 의도적으로 포함하지 않았습니다.
사용자 이름과 비밀번호를 입력하고 알고리즘을 고른 뒤, 나온 줄을 .htpasswd 파일에 복사하세요. New salt로 APR1 솔트를 다시 뽑을 수 있습니다(저장할 때마다 같은 비밀번호에 대해 다른 해시가 나오며, 이는 예상되고 정상입니다).
자주 묻는 질문
제 비밀번호가 어디로 전송되나요?
아니요. 모든 해싱은 APR1을 위한 내장 MD5와 SHA-1을 위한 네이티브 crypto.subtle을 사용해 전적으로 브라우저에서 실행됩니다. 아무것도 전송되지 않으며 eval이 없습니다.
어떤 알고리즘을 골라야 하나요?
APR1-MD5($apr1$)는 권장되는 Apache 기본값이며 솔트가 적용되므로, 여기서 둘 중 더 안전합니다. SHA-1({SHA})은 솔트가 없으며 주로 레거시 설정이나 nginx 호환성에 유용합니다.
왜 APR1 해시가 매번 바뀌나요?
APR1은 무작위 8자 솔트를 사용하므로, 같은 비밀번호가 매번 다른 해시를 만듭니다. 이는 의도된 것입니다. Apache는 로그인을 확인할 때 저장된 해시에서 솔트를 다시 읽어 냅니다.
왜 bcrypt는 제공하지 않나요?
Bcrypt는 의도적으로 제외됩니다. 정확한 순수 JavaScript bcrypt는 브라우저에서 크고 느릴 것이므로, 이 도구는 그 대신 신뢰할 수 있는 오프라인 APR1-MD5와 SHA-1 모드를 제공합니다.