เครื่องสร้าง Hash SHA-256
สร้าง hash SHA-256 จากข้อความใด ๆ
ข้อความป้อนเข้า
Hash SHA-256
Hash SHA-256 จะแสดงที่นี่…
SHA-256 Hashing คืออะไร?
SHA-256 (Secure Hash Algorithm 256-bit) เป็นฟังก์ชันแฮชเข้ารหัสลับในตระกูล SHA-2 ที่ NIST เผยแพร่ในปี 2001 เป็นส่วนหนึ่งของ FIPS 180-2 (ปรับปรุงใน FIPS 180-4) ไม่ว่าอินพุตจะเป็นอะไร — อักขระเดี่ยว ไฟล์ขนาดหลายกิกะไบต์ หรือสตริงว่าง — SHA-256 จะสร้าง digest ขนาดคงที่ 256 บิต (32 ไบต์) ซึ่งแสดงในรูปแบบตัวอักษรฐานสิบหกจำนวน 64 ตัวตามธรรมเนียม SHA-256 เป็นฟังก์ชันแฮชที่ใช้งานแพร่หลายที่สุดในระบบที่ใช้งานจริงในปัจจุบัน ทั้งในห่วงโซ่ใบรับรอง TLS, proof-of-work ของ Bitcoin, Subresource Integrity (SRI) และกระบวนการลงนามโค้ด
SHA-256 เป็นฟังก์ชันทางเดียว: การคำนวณแฮชจากอินพุตทำได้รวดเร็ว (หลายร้อยเมกะไบต์ต่อวินาทีบนฮาร์ดแวร์สมัยใหม่) แต่การย้อนกลับกระบวนการ — ค้นหาอินพุตที่สร้างแฮชที่กำหนด — เป็นไปไม่ได้ในทางคำนวณ คุณสมบัตินี้เรียกว่า preimage resistance ทำให้ SHA-256 เหมาะสำหรับการแฮชรหัสผ่าน (เมื่อใช้ร่วมกับ salt และ key-stretching) ลายเซ็นดิจิทัล และการยืนยันความสมบูรณ์ของข้อมูล ต่างจาก MD5 และ SHA-1 ที่ยังไม่มีการพิสูจน์การโจมตีแบบ collision หรือ preimage ต่อ SHA-256 แบบเต็มรูปแบบ
ตระกูล SHA-2 ประกอบด้วยหกตัวแปร: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 และ SHA-512/256 SHA-256 ทำงานบนเวิร์ด 32 บิตด้วย 64 รอบต่อบล็อก ซึ่งเหมาะสมสำหรับโปรเซสเซอร์ 32 บิต SHA-512 ใช้เวิร์ด 64 บิตและ 80 รอบ ซึ่งอาจเร็วกว่าบนแพลตฟอร์ม 64 บิต สำหรับแอปพลิเคชันส่วนใหญ่ที่ digest ขนาด 256 บิตเพียงพอ SHA-256 ยังคงเป็นคำแนะนำเริ่มต้นจาก NIST, IETF และ CA/Browser Forum
ทำไมต้องใช้เครื่องสร้าง SHA-256 ออนไลน์?
การสร้าง hash SHA-256 มักต้องใช้คำสั่ง terminal หรือเขียนโค้ดสองสามบรรทัด เครื่องมือในเบราว์เซอร์นี้ให้คุณคำนวณ SHA-256 digest ได้โดยไม่ต้องติดตั้งอะไร สลับบริบท หรือเขียนสคริปต์
กรณีการใช้งาน SHA-256
การเปรียบเทียบตัวแปรในตระกูล SHA-2
SHA-256 อยู่ในตระกูล SHA-2 ที่กำหนดไว้ใน FIPS 180-4 แต่ละตัวแปรมีการแลกเปลี่ยนระหว่างขนาด digest, คุณลักษณะด้านประสิทธิภาพ และระยะห่างด้านความปลอดภัย ตารางด้านล่างเปรียบเทียบตัวแปร SHA-2 ทั้งหมดที่คุณน่าจะพบ
| ตัวแปร | ขนาด Digest | ความยาว Hex | ขนาดไบต์ | เหมาะสำหรับ |
|---|---|---|---|---|
| SHA-256 | 256 bits | 64 hex chars | 32 bytes | TLS, blockchain, code signing, JWTs, SRI |
| SHA-224 | 224 bits | 56 hex chars | 28 bytes | Truncated SHA-256 — rare, specific compliance |
| SHA-384 | 384 bits | 96 hex chars | 48 bytes | Government / CNSS, higher collision margin |
| SHA-512 | 512 bits | 128 hex chars | 64 bytes | Digital signatures, HMAC with large keys |
| SHA-512/256 | 256 bits | 64 hex chars | 32 bytes | SHA-512 speed on 64-bit CPUs, 256-bit output |
SHA-256 เทียบกับ SHA-1, MD5 และ SHA-3
การเลือกอัลกอริทึม hash ที่เหมาะสมขึ้นอยู่กับข้อกำหนดด้านความปลอดภัยและข้อจำกัดด้านความเข้ากันได้ SHA-256 อยู่จุดกึ่งกลางที่ใช้งานได้จริง: ปลอดภัย รองรับได้ทั่วไป (รวมถึง Web Crypto API) และเร็วพอสำหรับงานส่วนใหญ่ ตารางเปรียบเทียบด้านล่างครอบคลุมคุณสมบัติที่สำคัญที่สุดในการเลือกฟังก์ชันแฮช
| คุณสมบัติ | SHA-256 | SHA-1 | MD5 | SHA-3-256 |
|---|---|---|---|---|
| Digest size | 256 bits (64 hex) | 160 bits (40 hex) | 128 bits (32 hex) | 256 bits (64 hex) |
| Security status | Secure | Broken (2017) | Broken (2004) | Secure |
| Collision resistance | 2^128 operations | Practical attack | Practical attack | 2^128 operations |
| Block size | 512 bits | 512 bits | 512 bits | 1600 bits (sponge) |
| Rounds | 64 | 80 | 64 | 24 |
| Standard | FIPS 180-4 | FIPS 180-4 | RFC 1321 | FIPS 202 |
| Web Crypto API | Yes | Yes | No | No |
| Primary use today | TLS, blockchain, SRI | Legacy git only | Non-security checksums | Backup standard |
SHA-256 ทำงานภายในอย่างไร
SHA-256 ประมวลผลอินพุตเป็นบล็อกขนาด 512 บิต (64 ไบต์) ผ่านโครงสร้าง Merkle–Damgård อัลกอริทึมเริ่มต้นด้วย state word ขนาด 32 บิตจำนวนแปดตัว (H0–H7) ที่ได้จากส่วนทศนิยมของรากที่สองของจำนวนเฉพาะแปดตัวแรก แต่ละบล็อกผ่าน 64 รอบของการผสม ซึ่งใช้การดำเนินการระดับบิต (AND, XOR, NOT, right-rotate, right-shift) และค่าคงที่ 64 รอบที่ได้จากรากที่สามของจำนวนเฉพาะ 64 ตัวแรก
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| ขั้นตอน | คำอธิบาย |
|---|---|
| Padding | Append a 1-bit, then zeros until the message length is 448 mod 512. Append the original message length as a 64-bit big-endian integer. |
| Block splitting | Divide the padded message into 512-bit (64-byte) blocks. |
| Message schedule | Expand each 16-word (32-bit) block into 64 words using sigma functions with right-rotate and right-shift operations. |
| Compression | Process 64 rounds per block using Ch, Maj, and two Sigma functions with 64 round constants derived from cube roots of the first 64 primes. |
| Output | Concatenate the eight 32-bit state words (H0-H7) into a 256-bit (32-byte) digest, rendered as 64 hexadecimal characters. |
avalanche effect ทำให้การพลิกบิตเดียวในอินพุตเปลี่ยนประมาณ 50% ของบิตในผลลัพธ์ คุณสมบัตินี้รวมกับความทนทานต่อ collision ที่ 2^128 คือเหตุผลที่ SHA-256 ยังคงเป็นคำแนะนำพื้นฐานสำหรับแอปพลิเคชันที่ต้องการความปลอดภัยในปี 2026
ตัวอย่างโค้ด SHA-256
SHA-256 พร้อมใช้งานโดยตรงในทุกภาษาและ runtime หลัก Web Crypto API รองรับในเบราว์เซอร์โดยไม่ต้องใช้ library ใด ตัวอย่างด้านล่างแสดงรูปแบบการใช้งานจริง รวมถึงการจัดการอินพุต Unicode และการแฮชไฟล์
// Works in all modern browsers and Node.js 18+
async function sha256(text) {
const data = new TextEncoder().encode(text)
const hashBuffer = await crypto.subtle.digest('SHA-256', data)
const hashArray = Array.from(new Uint8Array(hashBuffer))
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}
await sha256('hello world')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello world').digest('hex')
// → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"import hashlib
# Basic SHA-256 hash
result = hashlib.sha256(b'hello world').hexdigest()
print(result) # → "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
# Hash a string (encode to bytes first)
text = 'café ☕'
hashlib.sha256(text.encode('utf-8')).hexdigest()
# → "3eb53e00aa1bb4b1e8aab1ab38e56e6b8fb0b20e1cf7e1d19f36e4fad2537445"
# Hash a file in chunks (memory-efficient)
with open('release.tar.gz', 'rb') as f:
sha = hashlib.sha256()
for chunk in iter(lambda: f.read(8192), b''):
sha.update(chunk)
print(sha.hexdigest())package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("hello world")
hash := sha256.Sum256(data)
fmt.Printf("%x\n", hash)
// → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}# Using sha256sum (Linux) or shasum (macOS) echo -n "hello world" | sha256sum # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # macOS echo -n "hello world" | shasum -a 256 # → b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 - # Verify a file checksum echo "b94d27b... myfile.bin" | sha256sum -c # → myfile.bin: OK # Using openssl (cross-platform) echo -n "hello world" | openssl dgst -sha256 # → SHA2-256(stdin)= b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9