SHA-256 해시 생성기

브라우저의 Web Crypto API로 텍스트, 16진수 바이트, 모든 파일의 SHA-256 다이제스트를 계산합니다. 공개된 체크섬을 ‘비교 대상’ 필드에 붙여넣으면 다운로드한 파일을 검증할 수 있습니다.

모든 알고리즘

브라우저에서만 실행되며 어떤 데이터도 업로드되지 않습니다.

사용 방법

  1. 텍스트를 입력하거나 붙여넣습니다. 바이트를 입력하려면 ‘입력 형식’을 ‘16진수’로 바꾸고, 확인할 파일이 있으면 ‘파일 열기’로 엽니다.
  2. SHA-256을 선택한 상태로 두고 ‘출력 형식’에서 ‘16진수(소문자)’, ‘16진수(대문자)’, ‘Base64’ 중 하나를 고릅니다.
  3. 다운로드 페이지의 체크섬을 ‘비교 대상’ 필드에 붙여넣습니다. ‘일치’가 표시되면 파일이 동일하다는 뜻입니다.
  4. 결과를 복사하거나, ‘모든 알고리즘’ 표에서 SHA-384, SHA-512 등 다른 다이제스트를 복사합니다.

SHA-256이란 무엇입니까?

SHA-256은 SHA-2 계열에서 가장 널리 쓰이는 함수로, NSA가 설계하고 NIST가 2002년 FIPS 180-2로 표준화했습니다. 현재는 FIPS 180-4에 규정되어 있으며, RFC 6234는 같은 알고리즘을 참조 코드와 함께 제공합니다. SHA-256은 512비트 블록을 32비트 연산 64라운드로 처리하고 256비트 다이제스트를 출력합니다. 16진수로는 64자, Base64로는 44자입니다. 실용적인 충돌 공격이나 역상 공격은 알려져 있지 않으며, 다음과 같은 곳에서 기본으로 쓰입니다.

  • TLS 인증서와 핸드셰이크, 코드 서명
  • 블록 해시, 작업 증명, 트랜잭션 ID에 SHA-256을 두 번 적용하는 비트코인(Base58Check 주소의 체크섬도 같은 이중 해시에서 나옵니다)
  • SHA256SUMS 같은 체크섬 파일, 컨테이너 이미지 다이제스트(sha256:...), Subresource Integrity

다운로드한 파일 검증하기

다운로드한 파일을 열고 배포자가 공개한 체크섬을 ‘비교 대상’ 필드에 붙여넣으십시오. 대소문자는 상관없으며 Base64 값도 사용할 수 있습니다. ‘일치’는 체크섬을 만들 때 사용한 파일과 바이트 단위까지 똑같다는 뜻입니다. 하지만 누가 만든 파일인지는 증명하지 못하므로, 체크섬은 다운로드를 제공한 미러가 아니라 배포자의 HTTPS 사이트나 서명된 SHA256SUMS 파일에서 가져오십시오.

텍스트의 경우 해시는 문자가 아니라 바이트를 대상으로 합니다. Windows 줄 끝(CRLF), 바이트 순서 표시(BOM), UTF-8 대신 쓴 UTF-16은 각각 완전히 다른 SHA-256을 만듭니다. 다른 시스템이 해시한 것과 정확히 같은 바이트를 해시하려면 ‘문자 인코딩’ 선택 상자나 16진수 입력을 사용하십시오.

길이 확장 공격과 비밀번호

MD5, SHA-1, SHA-512와 마찬가지로 SHA-256도 길이 확장 공격에 취약합니다. SHA-256(secret + message)와 비밀 값의 길이를 알면, 공격자는 비밀 값을 몰라도 그 메시지 뒤에 패딩과 자신이 고른 데이터를 덧붙인 메시지의 유효한 해시를 계산할 수 있습니다. 키로 데이터에 서명하거나 데이터를 인증하려면 키와 메시지를 함께 해시하지 말고 HMAC 생성기의 HMAC-SHA256을 사용하십시오.

속도 역시 단순 SHA-256으로 비밀번호를 저장하면 안 되는 이유입니다. 해시를 손에 넣은 사람은 그래픽 카드가 SHA-256을 계산하는 속도만큼 빠르게 추측값을 시험할 수 있고, 같은 비밀번호는 같은 해시를 만듭니다. Argon2id, scrypt, bcrypt, 또는 반복 횟수를 높게 설정한 PBKDF2-HMAC-SHA256을 사용하십시오. 이들은 모두 솔트를 추가합니다.

명령줄과 코드에서 SHA-256 계산하기

$ printf 'abc' | sha256sum
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  -

sha256sum -c SHA256SUMS                  # Linux: 파일 목록 검사
shasum -a 256 file.iso                   # macOS
certutil -hashfile file.iso SHA256       # Windows
Get-FileHash file.iso                    # PowerShell(SHA256이 기본값)

# Python
hashlib.sha256(data).hexdigest()

// Node.js
crypto.createHash('sha256').update(data).digest('hex')

abc의 값은 표준에 실린 테스트 벡터입니다. 위 입력란에 abc를 입력하면 같은 결과를 볼 수 있습니다. ‘모든 알고리즘’ 표에는 입력한 내용의 SHA-384, SHA-512, SHA-1, MD5, CRC 값도 표시됩니다.

예시

입력 (UTF-8)SHA-256
Hello, World!dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
Base64.is63f2f446bc11a1f96175c0f77bdac08ca1b184ba42c3a42c34ddcbce00b1b800
你好670d9743542cae3ea7ebe36af56bd53648b0a1126162e78d81a32934a711302e

자주 묻는 질문

SHA-256을 복호화할 수 있습니까?

아니요. SHA-256은 암호화가 아니라 단방향 해시입니다. 온라인 "복호화" 사이트는 알려진 입력의 표에서 해시를 찾아볼 뿐이므로, 흔한 비밀번호와 짧은 문자열은 찾아도 길거나 무작위한 값은 찾지 못합니다.

SHA-256이 공개된 체크섬과 일치하지 않는 이유는 무엇입니까?

대부분 다운로드가 완료되지 않았거나 다른 버전이기 때문이며, 파일 대신 파일 이름을 해시한 경우도 있습니다. ‘파일 열기’로 파일 자체를 불러오십시오. 두 값이 같은 알고리즘인지도 확인하십시오. 16진수 128자 값은 SHA-256이 아니라 SHA-512 같은 512비트 해시에서 나온 것입니다.

SHA-256 해시를 Base64로 얻으려면 어떻게 합니까?
‘출력 형식’을 ‘Base64’로 설정하십시오. Subresource Integrity(sha256- 값, 다만 sha384-가 더 흔함)와 HTTP Content-Digest 헤더가 이 형식을 사용합니다. 16진수와 Base64는 같은 32바이트를 담고 있으며, Base64 16진수 변환 도구로 서로 변환할 수 있습니다.
SHA-256과 SHA-2는 같은 것입니까?

SHA-2는 SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256으로 이루어진 계열이며, SHA-256은 그중 가장 흔히 쓰이는 함수입니다. SHA-3(FIPS 202)은 Keccak을 기반으로 한 별개의 설계이며 결과도 다릅니다.

SHA-256 해시의 길이는 얼마입니까?
32바이트입니다. 16진수로는 64자, Base64로는 =로 끝나는 44자입니다. SHA3-256과 BLAKE2s도 길이가 같으며, 정체를 모르는 해시라면 해시 식별기가 이런 후보를 보여 줍니다.