Trình tạo Hash SHA-256
Tạo hash SHA-256 từ bất kỳ văn bản nào
Văn bản nhập
Hash SHA-256
Hash SHA-256 sẽ xuất hiện ở đây…
SHA-256 Hashing là gì?
SHA-256 (Thuật toán băm an toàn 256-bit) là hàm băm mật mã thuộc họ SHA-2, được NIST công bố năm 2001 trong FIPS 180-2 (cập nhật trong FIPS 180-4). Với bất kỳ đầu vào nào — một ký tự đơn, tệp nhiều gigabyte, hoặc chuỗi rỗng — SHA-256 tạo ra một giá trị băm cố định 256-bit (32 byte), thường hiển thị dưới dạng 64 ký tự thập lục phân. SHA-256 là hàm băm được triển khai rộng rãi nhất trong các hệ thống production hiện nay, làm nền tảng cho chuỗi chứng chỉ TLS, cơ chế proof-of-work của Bitcoin, Subresource Integrity (SRI) và quy trình ký mã.
SHA-256 là hàm một chiều: tính toán giá trị băm từ đầu vào rất nhanh (hàng trăm megabyte mỗi giây trên phần cứng hiện đại), nhưng đảo ngược quá trình — tìm đầu vào tạo ra giá trị băm đã cho — là không khả thi về mặt tính toán. Thuộc tính này, được gọi là khả năng kháng tiền ảnh, khiến SHA-256 phù hợp cho băm mật khẩu (kết hợp với salt và key-stretching), chữ ký số và xác minh tính toàn vẹn dữ liệu. Không giống MD5 và SHA-1, chưa có cuộc tấn công va chạm hay tiền ảnh nào được chứng minh với SHA-256 đầy đủ.
Họ SHA-2 gồm sáu biến thể: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 và SHA-512/256. SHA-256 hoạt động trên các từ 32-bit với 64 vòng mỗi khối, được tối ưu hóa cho bộ xử lý 32-bit. SHA-512 sử dụng các từ 64-bit và 80 vòng, có thể nhanh hơn trên nền tảng 64-bit. Đối với hầu hết các ứng dụng cần giá trị băm 256-bit, SHA-256 vẫn là khuyến nghị mặc định từ NIST, IETF và CA/Browser Forum.
Tại sao dùng công cụ tạo SHA-256 trực tuyến?
Thông thường, tạo giá trị băm SHA-256 đòi hỏi lệnh terminal hoặc vài dòng code. Công cụ trên trình duyệt này cho phép bạn tính toán giá trị băm SHA-256 mà không cần cài đặt bất cứ thứ gì, chuyển đổi ngữ cảnh hay viết thêm script.
Các trường hợp sử dụng SHA-256
So sánh các biến thể họ SHA-2
SHA-256 thuộc họ SHA-2 được định nghĩa trong FIPS 180-4. Mỗi biến thể có sự đánh đổi giữa kích thước giá trị băm, đặc điểm hiệu suất và biên độ bảo mật. Bảng dưới đây so sánh tất cả các biến thể SHA-2 mà bạn có khả năng gặp.
| Biến thể | Kích thước Digest | Độ dài Hex | Kích thước Byte | Phù hợp nhất cho |
|---|---|---|---|---|
| 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 so với SHA-1, MD5 và SHA-3
Lựa chọn thuật toán băm phù hợp phụ thuộc vào yêu cầu bảo mật và ràng buộc tương thích của bạn. SHA-256 chiếm vị trí thực tế tối ưu: an toàn, được hỗ trợ rộng rãi (bao gồm Web Crypto API) và đủ nhanh cho hầu hết khối lượng công việc. Bảng so sánh dưới đây bao gồm các thuộc tính quan trọng nhất khi chọn hàm băm.
| Thuộc tính | 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 hoạt động bên trong như thế nào?
SHA-256 xử lý đầu vào theo các khối 512-bit (64 byte) thông qua cấu trúc Merkle–Damgård. Thuật toán khởi tạo tám từ trạng thái 32-bit (H0–H7) được lấy từ phần thập phân của căn bậc hai của tám số nguyên tố đầu tiên. Mỗi khối đi qua 64 vòng trộn sử dụng các phép toán bitwise (AND, XOR, NOT, dịch phải vòng, dịch phải) và 64 hằng số vòng lấy từ phần thập phân của căn bậc ba của 64 số nguyên tố đầu tiên.
SHA-256: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
(256 bits = 32 bytes = 64 hex characters)
| Bước | Mô tả |
|---|---|
| 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. |
Hiệu ứng tuyết lở đảm bảo rằng việc đảo một bit trong đầu vào sẽ thay đổi khoảng 50% các bit đầu ra. Thuộc tính này, kết hợp với khả năng kháng va chạm 2^128, là lý do SHA-256 vẫn là khuyến nghị cơ sở cho các ứng dụng nhạy cảm về bảo mật trong năm 2026.
Ví dụ code SHA-256
SHA-256 có sẵn nguyên bản trong mọi ngôn ngữ và môi trường thực thi chính. Web Crypto API cung cấp nó trong trình duyệt mà không cần thư viện nào. Các ví dụ dưới đây minh họa các mẫu sử dụng thực tế bao gồm xử lý đầu vào Unicode và băm tệp.
// 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