SHA-256 해시를 Base64로 받는 방법
- 알고리즘에서 SHA-256이 선택되어 있습니다. 다른 버튼으로 MD5, SHA-1, SHA-384, SHA-512로 바꿀 수 있습니다.
- 입력이 텍스트인 상태에서 텍스트에 입력하거나 붙여넣으세요. 입력 형식은 그 텍스트를 어떻게 읽을지 정합니다. UTF-8 텍스트로 읽거나, 이미 인코딩된 바이너리 데이터를 해시하려면 hex 또는 Base64 바이트로 읽습니다.
- 결과를 Hex, Base64, Base64URL로 복사하세요. 모든 알고리즘에는 같은 입력의 다이제스트가 모두 나열됩니다.
- 파일을 해시하려면 입력을 파일로 바꾸고 하나 이상의 파일을 놓으세요. 파일마다 결과가 따로 나옵니다. 200 MB를 넘으면 SHA-256과 MD5는 진행률을 표시하며 8 MB 청크 단위로 계산하므로, 큰 파일도 한꺼번에 메모리에 올릴 필요가 없습니다.
해시는 입력하는 대로 갱신됩니다. 맨 위의 HMAC과 SRI를 누르면 키 기반 해시와 Subresource Integrity 태그로 전환됩니다.
해시 예시
| 입력 | SHA-256 (hex) | SHA-256 (Base64) |
|---|---|---|
| 빈 문자열 | e3b0c442…7852b855 | 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= |
hello | 2cf24dba…938b9824 | LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ= |
hello + 줄 바꿈 | 5891b5b5…46f6be03 | WJG1tSLV3whtD/CxEPvZ0hu0/HFjrzTQgoai6Eb2vgM= |
The quick brown fox jumps over the lazy dog | d7a8fbb3…37c9e592 | 16j7swfXgJRpypq8sAguT41WUeRtPNt2LQLQvzfJ5ZI= |
두 번째와 세 번째 행이 대부분의 불일치 뒤에 있는 함정입니다. 보이지 않는 줄 바꿈 하나로 해시가 완전히 달라집니다. 브라우저 텍스트 상자에 붙여넣은 텍스트는 줄 끝도 LF로 바뀌므로, CRLF 줄 끝을 쓰는 파일은 내용을 붙여넣지 말고 파일 자체를 놓으세요.
Base64로 된 SHA-256이 쓰이는 곳
다이제스트는 전통적으로 hex로 출력하지만, 많은 형식이 더 짧은 Base64를 씁니다.
- 인라인 스크립트용 Content Security Policy 해시:
script-src 'sha256-…'. - Subresource Integrity:
integrity="sha256-…". 다만 여기서는 SHA-384가 더 흔합니다. - HTTP
Content-Digest(RFC 9530): 본문{"hello": "world"}에 대해Content-Digest: sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:. 콜론은 structured header에서 바이너리 값을 표시합니다. - 클라우드 스토리지 체크섬: 예를 들어 Amazon S3의
x-amz-checksum-sha256헤더는 Base64 다이제스트를 담습니다. - 잠금 파일과 패키지 매니저:
package-lock.json의integrity필드(보통sha512-…)와 Nix의 SRI 형식 해시.
Docker와 OCI 이미지 다이제스트(sha256:…), Git은 hex를 씁니다. 시스템끼리 비교해야 할 때는 다시 해시하지 말고 Hex를 Base64로나 Base64를 Hex로로 변환하세요.
코드와 명령줄에서 SHA-256 Base64
printf 'hello' | openssl dgst -sha256 -binary | base64
sha256sum file.bin | cut -d' ' -f1 | xxd -r -p | base64
-binary가 없으면 OpenSSL은 hex 텍스트를 출력하고, 그 텍스트를 Base64로 바꾸면 의미 없는 88자가 됩니다.
import base64, hashlib
digest = hashlib.sha256(b"hello").digest()
print(base64.b64encode(digest).decode())
Node.js에서는 crypto.createHash("sha256").update("hello").digest("base64")가 같은 LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=를 반환하고, "base64url"은 URL-safe 형식을 줍니다. 일반 해시는 서명이 아닙니다. 누구나 다시 계산할 수 있습니다. 키를 가진 사람이 보낸 메시지임을 증명하려면 HMAC을 쓰세요. 더 많은 내용은 Python에서 Base64와 OpenSSL에 있습니다.
자주 묻는 질문
SHA-256 값이 명령줄에서 얻은 값과 다른 이유는 무엇인가요?
거의 항상 끝의 줄 바꿈 때문입니다. echo hello는 hello와 \n을 합친 6바이트를 출력하므로 hello의 해시와 다릅니다. 셸에서는 printf 'hello'나 echo -n hello를 쓰거나, 파일을 여기에 놓아 비교하세요.
SHA-256 해시는 Base64로 몇 자인가요?
44자이고 = 하나로 끝납니다. 패딩 없는 Base64URL이면 43자입니다. hex로는 64자입니다. 88자가 나왔다면 원시 다이제스트가 아니라 hex 텍스트를 Base64로 인코딩한 것입니다.
SHA-256 hex 문자열을 Base64로 바꿀 수 있나요?
네, 다이제스트 바이트는 같습니다. hex 64자를 Hex를 Base64로에 붙여넣거나, 셸에서 hex에 xxd -r -p를 실행하고 그 결과를 base64로 넘기세요.
SHA-256을 원래 텍스트로 디코딩할 수 있나요?
아니요. 해시는 단방향 지문이라 디코딩할 것이 없습니다. Base64를 디코딩해도 다이제스트 32바이트만 나옵니다. 인코딩과 무엇이 다른지는 Base64는 암호화가 아닙니다를 참고하세요.