자주 묻는 질문
MD5나 SHA-1로 비밀번호를 저장해도 되나요?
아니요. MD5와 SHA-1은 모두 빠른 설계이고 충돌 공격에도 깨졌습니다. 최신 GPU장비는 초당 수십억 번 시도가 가능합니다. 비밀번호에는 bcrypt·scrypt·Argon2 같은 비밀번호 해시 함수를 사용자별 솔트와 함께 사용하세요. 범용 해시는 무결성 체크용이며 인증 정보에는 부적합합니다.
이 도구로 파일도 해싱할 수 있나요?
직접은 안 됩니다. 입력은 텍스트만 받습니다. 바이너리 파일은 shasum·sha256sum·certutil·Get-FileHash 같은 로컬 도구로 해싱하세요. 작은 텍스트 파일은 내용을 붙여 넣어 계산할 수 있지만, 클립보드를 거치면 줄바꿈 문자나 공백이 바뀌어 해시가 달라지는 경우가 잦습니다.
README에 적힌 해시와 결과가 다른 이유는?
입력에 보이지 않는 차이가 있는 경우가 가장 흔합니다. 끝줄바꿈, 맨 앞의 BOM, CRLF와 LF 줄바꿈 차이, 인코딩 불일치 같은 것들입니다. 공백을 제거하고 줄바꿈을 LF로 통일하고 BOM을 빼고 다시 시도하세요. 1바이트만 달라도 해시 전체가 바뀝니다.
해시는 암호화와 같은 건가요?
아니요. 해시는 단방향입니다. 해시값에서 입력을 복원할 수 없습니다. 암호화는 올바른 키가 있으면 복호화됩니다. 해시는 "두 데이터가 동일한가"를 판정하는 용도(체크섬·서명·중복 제거)이고, 암호화는 "키 없는 사람에게는 내용을 숨기는" 용도입니다.
새 코드에서는 어떤 알고리즘을 써야 하나요?
일반적인 무결성 체크(체크섬·콘텐츠 어드레싱·서명 입력)에는 SHA-256이 무난한 기본값입니다. 더 긴 다이제스트가 필요하면 SHA-512, 최대 속도가 필요하면 BLAKE3(이 도구에는 없지만 알아 둘 가치가 있음)를 쓰세요. MD5와 SHA-1은 레거시 프로토콜 재현이 아니면 피하세요.
관련 개념
암호학적 해시 함수는 임의의 입력을 고정 길이 다이제스트로 변환하며 세 가지 핵심 성질을 만족합니다. 원상 저항성(다이제스트에서 입력 복원 불가), 제2원상 저항성(같은 다이제스트를 갖는 다른 입력 구성 불가), 충돌 저항성(같은 다이제스트를 갖는 임의의 입력 쌍 발견 불가). 이 셋이 모두 성립할 때 다이제스트는 쓸 만한 지문이 됩니다.
MD5(128비트)와 SHA-1(160비트)은 충돌 저항성이 무너진 지 오래이며 실제 충돌 사례가 공개되어 있습니다. 보안 용도로 쓰지 말고 파일 중복 제거나 캐시 키 같은 비보안 용도에만 한정하세요. 무결성 확인에는 SHA-2(SHA-256·SHA-512)가 현역입니다. 이들 모두 비밀번호 저장에는 부적합합니다. 빠른 설계이기 때문에, 공격자가 해시를 손에 넣으면 평범한 하드웨어에서도 초당 수십억 번 무차별 대입이 가능합니다. 비밀번호 해시(bcrypt·scrypt·Argon2)는 솔트·메모리 비용·조정 가능한 반복 횟수를 더해 의도적으로 느리게 만듭니다.