Hash
생성기
텍스트에서 MD5, SHA-1, SHA-256, SHA-512 해시를 즉시 생성합니다
해시(Hash)란?
해시 함수는 임의의 데이터를 고정된 길이의 문자열로 변환합니다. SHA-256은 비밀번호 저장, 파일 무결성 검증, 블록체인 등에 사용됩니다. 동일한 입력은 항상 동일한 해시값을 생성하며, 역방향 복원은 불가능합니다.
활용 예시
- 소프트웨어 배포: SHA-256으로 다운로드 파일 무결성 검증
- 비밀번호 저장: SHA-256 + salt로 DB 저장 (평문 저장 금지)
- Git 커밋 ID: SHA-1 기반 40자 커밋 해시로 코드 변경 추적
- 블록체인: Bitcoin SHA-256 이중 해시로 블록 연결·작업증명
- API 서명: HMAC-SHA256으로 요청 위변조 방지
- 데이터 중복 제거: 파일 SHA-256으로 동일 파일 식별
자주 묻는 질문
Q. MD5, SHA-1, SHA-256 중 어떤 것을 써야 하나요?
A. 보안 목적에는 SHA-256 이상을 사용하세요. MD5와 SHA-1은 충돌 취약점이 발견되어 보안용으로 부적합합니다.
Q. 같은 텍스트는 항상 같은 해시값이 나오나요?
A. 네. 동일한 입력은 항상 동일한 해시값을 생성합니다. 대소문자 하나만 달라도 완전히 다른 해시가 생성됩니다.
Q. 해시로 원본 텍스트를 복원할 수 있나요?
A. 불가능합니다. 해시는 단방향 함수로 설계되어 역산이 불가능합니다.
Q. 파일 무결성은 어떻게 확인하나요?
A. 파일 다운로드 후 SHA-256 해시값을 계산해 공식 제공 해시값과 비교하면 파일 변조 여부를 확인할 수 있습니다.
Q. 해시 충돌이란 무엇인가요?
A. 서로 다른 두 입력이 동일한 해시값을 생성하는 현상입니다. 이론적으로 해시 출력이 유한하므로 무한 입력과 충돌은 불가피하지만, SHA-256의 2²⁵⁶가지 출력 공간은 현실적으로 충돌을 불가능하게 합니다. MD5와 SHA-1은 충돌이 실제로 발견되어 보안 용도에 사용할 수 없습니다.
Q. 비밀번호 저장에 해시를 어떻게 사용하나요?
A. 비밀번호를 평문으로 저장하는 대신, salt(무작위 값)를 추가한 후 SHA-256(또는 bcrypt/Argon2 등 전용 함수)으로 해시해 DB에 저장합니다. 로그인 시 동일한 salt로 입력 비밀번호를 해시해 비교합니다. bcrypt나 Argon2는 의도적으로 느리게 설계되어 무차별 대입 공격에 더 강합니다.
Q. HMAC이란 무엇인가요?
A. Hash-based Message Authentication Code의 약자로, 비밀 키를 해시 함수와 결합해 메시지 인증에 사용합니다. HMAC-SHA256은 API 요청 서명, JWT(JSON Web Token), OAuth에서 데이터 무결성과 인증에 널리 사용됩니다. 단순 해시와 달리 비밀 키 없이는 위변조가 불가능합니다.
Q. SHA-256과 SHA-3의 차이는?
A. SHA-2 계열(SHA-256, SHA-512)은 NSA 설계, 현재도 안전. SHA-3(Keccak 알고리즘)은 NIST가 2015년 표준화한 대안으로, 스펀지 구조를 사용해 SHA-2와 근본적으로 다른 설계입니다. 현재 SHA-256이 더 광범위하게 지원되며, SHA-3는 SHA-2 취약점 발견 시 대비책으로 준비된 표준입니다.
Q. 블록체인에서 해시는 어떻게 사용되나요?
A. 비트코인은 SHA-256 이중 해시(SHA256(SHA256(data)))를 사용합니다. 각 블록의 해시는 이전 블록 해시를 포함해 체인을 형성합니다. 작업증명(PoW)은 특정 조건(해시 앞에 0이 n개)을 만족하는 nonce를 찾는 과정입니다. 한 블록을 변경하면 이후 모든 블록 해시가 바뀌므로 변조가 사실상 불가능합니다.
Q. 해시 함수의 속도가 중요한가요?
A. 용도에 따라 다릅니다. 파일 무결성 검증·체크섬에는 빠른 SHA-256이 적합합니다. 비밀번호 저장에는 의도적으로 느린 bcrypt(비용 인자 조절 가능), Argon2(메모리 집약적)가 권장됩니다. 빠른 해시는 무차별 대입 공격에 취약하므로 비밀번호 해시에는 속도가 느릴수록 좋습니다.
Q. 16진수(hex) 해시를 Base64로 변환할 수 있나요?
A. 네. SHA-256 hex(64자)를 Base64로 변환하면 44자(패딩 포함)로 줄어듭니다. JWT, HTTP 헤더, URL 등 ASCII 공간이 제한된 환경에서 Base64 인코딩이 선호됩니다. btoa(String.fromCharCode(...new Uint8Array(hashBuffer))) 형태로 JavaScript에서 변환 가능합니다.
Q. CRC32는 해시인가요?
A. CRC32는 오류 검출용 체크섬이지 암호화 해시 함수가 아닙니다. 의도적인 충돌 생성이 쉬워 보안 용도에 사용할 수 없습니다. 파일 전송 오류 감지나 데이터 무결성 확인(비보안)에 사용됩니다. 보안 목적에는 반드시 SHA-256 이상을 사용하세요.