SHA-512 해시 생성기
임의의 텍스트에서 SHA-512 해시 생성
입력 텍스트
SHA-512 해시
SHA-512 해시가 여기에 표시됩니다…
SHA-512 해싱이란?
SHA-512는 NIST FIPS 180-4에 SHA-2 계열의 가장 큰 구성원으로 정의된 암호화 해시 함수입니다. 임의 길이의 입력을 받아 고정된 512비트(64바이트) 메시지 다이제스트를 생성하며, 128자리 16진수 문자열로 표시됩니다. SHA-512는 디지털 서명(Ed25519는 내부적으로 SHA-512에 의존), HMAC 구성, 파일 무결성 검증, 그리고 넓은 보안 마진이 필요한 암호화 프로토콜에서 사용됩니다.
SHA-512는 64비트 워드 연산과 80회 압축 라운드를 사용하여 1024비트(128바이트) 블록을 처리합니다. 8개의 초기 해시값은 처음 8개 소수의 제곱근의 소수 부분에서 파생되며, 80개의 라운드 상수는 처음 80개 소수의 세제곱근에서 도출됩니다. 64비트 연산을 사용하기 때문에 SHA-512는 더 긴 다이제스트를 생성함에도 불구하고 현대 64비트 프로세서에서 SHA-256보다 빠른 경우가 많습니다.
SHA-384, SHA-512/224, SHA-512/256은 모두 SHA-512의 잘린(truncated) 변형으로, 동일한 내부 구조를 공유하지만 다른 초기 해시값을 사용하고 더 적은 비트를 출력합니다. SHA-2 계열이 제공하는 최대 다이제스트 길이가 필요하거나, Ed25519 또는 특정 HMAC 기반 키 파생 방식처럼 프로토콜이 SHA-512를 명시적으로 요구할 때 SHA-512가 올바른 선택입니다. SHA-512는 256비트의 충돌 저항성을 제공하며, 이는 SHA-3-512와 동등하고 SHA-256의 128비트 한계를 크게 초과합니다.
온라인 SHA-512 생성기를 사용하는 이유
SHA-512 해시를 생성하려면 보통 터미널 명령어나 몇 줄의 코드가 필요합니다. 이 브라우저 기반 도구를 사용하면 소프트웨어를 설치하거나, 터미널로 전환하거나, 일회용 스크립트를 작성하지 않고도 즉시 SHA-512 다이제스트를 생성할 수 있습니다.
SHA-512 해시 생성기 활용 사례
SHA-2 계열 변형 비교
SHA-512는 FIPS 180-4에 정의된 SHA-2 계열에 속합니다. 아래 표는 SHA-512의 64비트 내부 구조를 공유하는 SHA-2 변형들을 SHA-256과 함께 비교합니다.
| 변형 | 다이제스트 크기 | 16진수 길이 | 바이트 크기 | 적합한 용도 |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS certificates, blockchain, JWTs, SRI |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | TLS 1.3 CertificateVerify, CNSA/Suite B |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC, Ed25519, file integrity |
| SHA-512/224 | 224 bits | 56 hex chars | 28 bytes | SHA-512 speed on 64-bit CPUs, 224-bit output |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-512 대 SHA-256 대 SHA-384 대 SHA-3-512
적합한 해시 알고리즘 선택은 보안 요구사항, 성능 제약, 프로토콜 명세에 달려 있습니다. SHA-512는 SHA-2 계열에서 가장 넓은 다이제스트를 제공하며 64비트 하드웨어에서 SHA-256보다 빠른 경우가 많습니다. 아래 비교는 선택 시 가장 중요한 속성들을 다룹니다.
| 속성 | SHA-512 | SHA-256 | SHA-384 | SHA-3-512 |
|---|---|---|---|---|
| Digest size | 512 bits (128 hex) | 256 bits (64 hex) | 384 bits (96 hex) | 512 bits (128 hex) |
| Block size | 1024 bits | 512 bits | 1024 bits | 1600 bits (sponge) |
| Word size | 64 bits | 32 bits | 64 bits | N/A (sponge) |
| Rounds | 80 | 64 | 80 | 24 |
| Collision resistance | 2^256 operations | 2^128 operations | 2^192 operations | 2^256 operations |
| Security status | Secure | Secure | Secure | Secure |
| Standard | FIPS 180-4 | FIPS 180-4 | FIPS 180-4 | FIPS 202 |
| Web Crypto API | Yes | Yes | Yes | No |
| 64-bit optimized | Yes | No (32-bit words) | Yes | Yes |
| Primary use today | Ed25519, HMAC, file checksums | TLS, blockchain, SRI | TLS 1.3, CNSA | Backup standard |
SHA-512 내부 동작 원리
SHA-512는 Merkle-Damgård 구조를 통해 1024비트 블록 단위로 입력을 처리합니다. 처음 8개 소수의 제곱근의 소수 부분에서 파생된 8개의 64비트 상태 워드(H0–H7)를 초기화합니다. 각 블록은 64비트 워드에 대한 비트 연산(AND, XOR, NOT, 우회전, 우이동)과 처음 80개 소수의 세제곱근에서 파생된 80개 라운드 상수를 사용하는 80회의 혼합 라운드를 거칩니다.
SHA-512: 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f
989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f
(512 bits = 64 bytes = 128 hex characters)
| 단계 | 설명 |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 896 mod 1024. Append the original length as a 128-bit big-endian integer. |
| Block splitting | Divide the padded message into 1024-bit (128-byte) blocks. |
| Message schedule | Expand each 16-word (64-bit) block into 80 words using sigma functions with right-rotate and right-shift operations on 64-bit values. |
| Compression | Process 80 rounds per block using Ch, Maj, and two Sigma functions with 80 round constants derived from the cube roots of the first 80 primes. |
| Output | Concatenate the eight 64-bit state words (H0–H7) into a 512-bit (64-byte) digest, rendered as 128 hexadecimal characters. |
더 넓은 64비트 워드 크기가 SHA-256과의 핵심 차이입니다. 64비트 CPU에서 각 연산은 사이클당 두 배의 비트를 처리하므로, SHA-512는 64라운드 대신 80라운드를 실행함에도 벤치마크에서 SHA-256보다 성능이 뛰어난 경우가 많습니다. 눈사태 효과는 단일 입력 비트를 반전시키면 512개 출력 비트 중 약 50%가 변경됨을 보장합니다.
SHA-512 코드 예제
SHA-512는 모든 주요 언어와 런타임에서 네이티브로 지원됩니다. Web Crypto API는 라이브러리 없이 브라우저에서 제공합니다. 아래 예제는 유니코드 처리와 파일 해싱을 포함한 일반적인 패턴을 다룹니다.
// Works in all modern browsers and Node.js 18+
async function sha512(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-512', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha512('hello world')
// → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha512').update('hello world').digest('hex')
// → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f"import hashlib
# Basic SHA-512 hash
result = hashlib.sha512(b'hello world').hexdigest()
print(result)
# → "309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee..."
# Hash a string with Unicode (encode to bytes first)
text = 'café ☕'
hashlib.sha512(text.encode('utf-8')).hexdigest()
# → 128-character hex string
# Hash a large file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha512()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha512"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha512.Sum512(data)
fmt.Printf("%x\n", hash)
// → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f...
}# Using sha512sum (Linux) or shasum (macOS) echo -n "hello world" | sha512sum # → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee... - # macOS echo -n "hello world" | shasum -a 512 # → 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee... - # Verify a file checksum echo "309ecc48... myfile.bin" | sha512sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha512 # → SHA2-512(stdin)= 309ecc489c12d6eb4cc40f50c902f2b4...