Trình tạo Hash SHA-1

Tạo hash SHA-1 từ bất kỳ văn bản nào

Văn bản nhập

Chạy cục bộ · An toàn để dán thông tin bí mật

Hash SHA-1

Hash SHA-1 sẽ xuất hiện ở đây…

SHA-1 Hashing Là Gì?

SHA-1 (Secure Hash Algorithm 1) là một hàm băm mật mã tạo ra giá trị băm cố định 160-bit (20 byte) từ bất kỳ đầu vào nào. Được NSA công bố và NIST chuẩn hóa vào năm 1995 theo FIPS PUB 180-1, sau đó được ghi lại trong RFC 3174, SHA-1 được thiết kế là người kế nhiệm mạnh mẽ hơn của SHA-0 và MD5. Thuật toán xử lý đầu vào theo từng khối 512-bit qua 80 vòng phép toán bitwise, tạo ra dấu vân tay thập lục phân 40 ký tự — nền tảng của SSL/TLS, PGP, SSH và IPsec trong hơn một thập kỷ.

Như mọi hàm băm mật mã, SHA-1 là phép biến đổi một chiều: tính toán giá trị băm từ đầu vào rất nhanh, nhưng khôi phục đầu vào từ giá trị băm là không khả thi về mặt tính toán. Thay đổi một bit trong đầu vào tạo ra giá trị băm 160-bit hoàn toàn khác — đặc tính này gọi là hiệu ứng thác đổ. SHA-1 ánh xạ không gian đầu vào tùy ý lớn vào đầu ra 160-bit cố định, điều này có nghĩa là va chạm (hai đầu vào khác nhau tạo ra cùng giá trị băm) phải tồn tại về mặt toán học. Yêu cầu bảo mật của một hàm băm là việc tìm ra các va chạm như vậy cần khoảng 2^80 phép tính — bằng một nửa độ dài bit đầu ra.

Năm 2017, Google và CWI Amsterdam công bố cuộc tấn công SHAttered, chứng minh va chạm SHA-1 thực tế đầu tiên bằng cách tạo ra hai tệp PDF khác nhau có cùng giá trị băm. Cuộc tấn công yêu cầu khoảng 2^63.1 phép tính SHA-1 — thấp hơn nhiều so với ngưỡng lý thuyết 2^80. Năm 2020, Gaetan Leurent và Thomas Peyrin tiếp tục giảm chi phí với cuộc tấn công va chạm tiền tố được chọn chỉ cần khoảng 2^63.4 phép tính. Kết quả là, tất cả các trình duyệt lớn, tổ chức chứng nhận và cơ quan tiêu chuẩn đã loại bỏ SHA-1 cho chữ ký số và chứng chỉ TLS. Tuy nhiên, SHA-1 vẫn được sử dụng tích cực cho các mục đích phi bảo mật: ID đối tượng Git (dù Git đang chuyển sang SHA-256), các cấu trúc HMAC cũ, và kiểm tra tính toàn vẹn tệp khi khả năng chống va chạm từ đối thủ không được yêu cầu.

Tại Sao Dùng Công Cụ Tạo SHA-1 Này?

Tạo giá trị băm SHA-1 ngay lập tức mà không cần cài đặt gì hay viết code. Dán văn bản của bạn và nhận giá trị băm hex 40 ký tự theo thời gian thực — hữu ích để xác minh checksum cũ, gỡ lỗi nội bộ Git, hoặc kiểm tra quy trình dựa trên băm.

Băm Tức Thì
Kết quả cập nhật khi bạn gõ. Không cần nhấn nút, không cần chờ đợi — giá trị băm SHA-1 hiện ra từng ký tự khi bạn chỉnh sửa đầu vào.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Toàn bộ quá trình băm chạy cục bộ trong trình duyệt của bạn bằng Web Crypto API. Văn bản đầu vào không bao giờ rời khỏi thiết bị của bạn và không bao giờ được gửi đến máy chủ nào.
📋
Sao Chép Một Cú Nhấp
Sao chép giá trị băm vào clipboard chỉ với một cú nhấp. Chuyển đổi giữa đầu ra hex chữ thường và chữ hoa để phù hợp với định dạng mà hệ thống của bạn yêu cầu.
🔍
Không Cần Tài Khoản
Không đăng ký, không đăng nhập, không giới hạn sử dụng. Mở trang và bắt đầu băm ngay lập tức. Hoạt động trên mọi thiết bị có trình duyệt hiện đại.

Các Trường Hợp Sử Dụng SHA-1

Nội Bộ Git & Gỡ Lỗi
Git xác định mọi đối tượng (commit, tree, blob, tag) bằng giá trị băm SHA-1 của nó. Khi gỡ lỗi các lệnh plumbing của Git, xác minh pack file, hoặc viết công cụ Git tùy chỉnh, một công cụ tạo SHA-1 nhanh giúp bạn đối chiếu ID đối tượng với các giá trị mong đợi.
Xác Minh Hệ Thống Cũ
Nhiều hệ thống cũ, kho package và cơ chế cập nhật firmware vẫn công bố checksum SHA-1 cùng với các bản tải xuống. Tạo và so sánh giá trị băm SHA-1 để xác minh tính toàn vẹn tệp khi không có giá trị băm SHA-256.
Subresource Integrity (SRI)
Trong khi sha256 và sha384 được ưu tiên cho các giá trị băm SRI trong thẻ script và link HTML, một số cấu hình CDN cũ vẫn dựa vào SHA-1. Tạo giá trị băm mong đợi để kiểm tra hoặc chuyển đổi các thuộc tính SRI hiện có.
Kiểm Tra QA & Hồi Quy
So sánh giá trị băm SHA-1 của các phản hồi API, artifact build, hoặc snapshot cơ sở dữ liệu giữa các lần chạy kiểm tra để phát hiện thay đổi không mong đợi mà không cần thực hiện so sánh byte-by-byte đầy đủ trên các đầu ra lớn.
Loại Bỏ Dữ Liệu Trùng Lặp
Tính toán giá trị băm SHA-1 của nội dung tệp hoặc bản ghi dữ liệu trong các pipeline ETL để xác định trùng lặp. Đầu ra 160-bit cung cấp đảm bảo tính duy nhất mạnh hơn MD5 cho các tình huống loại bỏ trùng lặp không có đối thủ.
Học Tập & Giáo Dục
SHA-1 là một thuật toán được ghi chép rõ ràng với tài liệu học thuật phong phú. Thử nghiệm với nó để hiểu cấu trúc Merkle-Damgard, lịch trình thông điệp, và lý do tại sao khả năng chống va chạm suy giảm khi độ dài đầu ra quá ngắn so với sức mạnh tính toán hiện đại.

SHA-1 So Với Các Thuật Toán Băm Khác

SHA-1 tạo ra giá trị băm 160-bit — dài hơn MD5 (128 bit) nhưng ngắn hơn đáng kể so với các thuật toán trong họ SHA-2. Bảng dưới đây so sánh kích thước giá trị băm, tiêu chuẩn và các trường hợp sử dụng phù hợp cho từng thuật toán.

Thuật ToánKích Thước Giá Trị BămĐộ Dài HexTiêu ChuẩnPhù Hợp Nhất Cho
SHA-1160 bits40 hex chars1995 / RFC 3174Deprecated — legacy git commits, old TLS
SHA-256256 bits64 hex chars2001 / FIPS 180-4TLS certificates, blockchain, JWTs
SHA-384384 bits96 hex chars2001 / FIPS 180-4Government systems, higher security margin
SHA-512512 bits128 hex chars2001 / FIPS 180-4Digital signatures, HMAC with large keys
MD5128 bits32 hex chars1992 / RFC 1321Checksums only — broken since 2004
SHA-3256 bits64 hex chars2015 / FIPS 202Post-quantum readiness, alternative to SHA-2
BLAKE3256 bits64 hex chars2020High-performance checksums, Merkle trees

SHA-1 Hoạt Động Như Thế Nào?

SHA-1 tuân theo cấu trúc Merkle-Damgard: thông điệp được đệm, chia thành các khối 512-bit, và mỗi khối được xử lý qua 80 vòng phép toán bitwise trộn đầu vào với lịch trình thông điệp được rút ra từ khối. Năm từ trạng thái 32-bit (H0 đến H4) mang trạng thái băm đang chạy, và việc nối các từ này lại tạo ra giá trị băm 160-bit cuối cùng.

Input: "hello world"
SHA-1: 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
(160 bits = 20 bytes = 40 hex characters)
BướcMô Tả
PaddingAppend a 1-bit, then zeros, until message length is 448 mod 512. Append the original length as a 64-bit big-endian integer.
Block splittingDivide the padded message into 512-bit (64-byte) blocks.
ExpansionExpand each 16-word block into 80 words using a left-rotate-by-1 XOR feedback schedule.
CompressionProcess 80 rounds per block using four nonlinear functions (Ch, Parity, Maj, Parity) across rounds 0-19, 20-39, 40-59, and 60-79.
OutputConcatenate the five 32-bit state words (H0-H4) into a 160-bit (20-byte) digest, rendered as 40 hexadecimal characters.

Sự khác biệt chính giữa SHA-1 và MD5 là số lượng từ trạng thái (5 so với 4), số vòng mỗi khối (80 so với 64), và việc sử dụng lịch trình thông điệp với phản hồi xoay trái. Những khác biệt này cho SHA-1 đầu ra lớn hơn (160 so với 128 bit) và ban đầu cung cấp biên độ bảo mật cao hơn, mặc dù cả hai thuật toán hiện được coi là đã bị phá vỡ về khả năng chống va chạm.

Ví Dụ Code

Cách tạo giá trị băm SHA-1 trong các ngôn ngữ và môi trường phổ biến. Khác với MD5, SHA-1 có sẵn trong Web Crypto API của trình duyệt, cho phép sử dụng mà không cần thư viện bên ngoài trong cả trình duyệt và môi trường Node.js.

JavaScript (Web Crypto API — browser & Node.js)
// SHA-1 is available in the Web Crypto API
async function sha1(text) {
  const data = new TextEncoder().encode(text)
  const hashBuffer = await crypto.subtle.digest('SHA-1', data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

await sha1('hello world')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

// Node.js (built-in crypto module)
const crypto = require('crypto')
crypto.createHash('sha1').update('hello world').digest('hex')
// → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"
Python
import hashlib

# Basic SHA-1 hash
result = hashlib.sha1(b'hello world').hexdigest()
print(result)  # → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a string (encode to bytes first)
text = 'hello world'
hashlib.sha1(text.encode('utf-8')).hexdigest()
# → "2aae6c35c94fcfb415dbe95f408b9ce91ee846ed"

# Hash a file in chunks
with open('file.bin', 'rb') as f:
    sha1 = hashlib.sha1()
    for chunk in iter(lambda: f.read(8192), b''):
        sha1.update(chunk)
    print(sha1.hexdigest())
Go
package main

import (
    "crypto/sha1"
    "fmt"
)

func main() {
    data := []byte("hello world")
    hash := sha1.Sum(data)
    fmt.Printf("%x\n", hash)
    // → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed
}
CLI (Linux / macOS)
# Using sha1sum (Linux) or shasum (macOS)
echo -n "hello world" | sha1sum
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# macOS
echo -n "hello world" | shasum -a 1
# → 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed  -

# Hash a file
sha1sum package.json
# → a1b2c3d4e5f6...  package.json

# Using openssl (cross-platform)
echo -n "hello world" | openssl sha1
# → SHA1(stdin)= 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed

Câu Hỏi Thường Gặp

SHA-1 còn an toàn để sử dụng không?
SHA-1 không an toàn cho các ứng dụng nhạy cảm về bảo mật. Cuộc tấn công SHAttered năm 2017 đã chứng minh việc tạo va chạm thực tế, và cuộc tấn công tiền tố được chọn năm 2020 tiếp tục giảm chi phí. Đối với chữ ký số, chứng chỉ TLS, hoặc bất kỳ tình huống nào mà đối thủ có thể tạo ra đầu vào va chạm, hãy sử dụng SHA-256 hoặc SHA-3 thay thế. Đối với các mục đích phi bảo mật như checksum và cache key khi không có đối thủ kiểm soát đầu vào, SHA-1 vẫn hoạt động được.
Sự khác biệt giữa SHA-1 và SHA-256 là gì?
SHA-1 tạo ra giá trị băm 160-bit (40 ký tự hex) và dễ bị tấn công va chạm. SHA-256 tạo ra giá trị băm 256-bit (64 ký tự hex) và thuộc họ SHA-2, không có cuộc tấn công thực tế nào được biết đến. SHA-256 chậm hơn SHA-1 khoảng 20-30% trên cùng phần cứng, nhưng 96 bit đầu ra bổ sung và sự vắng mặt của các điểm yếu cấu trúc đã biết khiến nó trở thành khuyến nghị mặc định cho bất kỳ dự án mới nào.
Tại sao Git sử dụng SHA-1?
Khi Linus Torvalds thiết kế Git vào năm 2005, SHA-1 được coi là an toàn và cung cấp sự cân bằng tốt giữa tốc độ và khả năng chống va chạm cho lưu trữ có thể định địa chỉ theo nội dung. Git sử dụng SHA-1 như một định danh nội dung, không phải cơ chế bảo mật — nó phát hiện lỗi hỏng ngẫu nhiên, không phải can thiệp từ đối thủ. Từ năm 2021, Git đang chuyển sang SHA-256 thông qua khung mở rộng băm được mô tả trong kế hoạch git-hash-function-transition.
Bạn có thể đảo ngược giá trị băm SHA-1 về đầu vào gốc không?
Không. SHA-1 là hàm một chiều loại bỏ thông tin trong quá trình băm. Đối với các đầu vào ngắn hoặc phổ biến, kẻ tấn công có thể sử dụng bảng rainbow hoặc tìm kiếm brute-force để tìm văn bản gốc, nhưng đây không phải là đảo ngược thuật toán — đó là tìm kiếm toàn diện không gian đầu vào. Đối với mật khẩu, hãy sử dụng bcrypt, scrypt hoặc Argon2 thay vì bất kỳ hàm băm nhanh nào.
Cuộc tấn công SHAttered hoạt động như thế nào?
Cuộc tấn công SHAttered khai thác các điểm yếu cấu trúc trong hàm nén SHA-1. Bằng cách cẩn thận xây dựng hai khối thông điệp 512-bit khác nhau tạo ra cùng trạng thái băm trung gian, những kẻ tấn công đã tạo ra hai tệp PDF có giá trị băm SHA-1 giống nhau nhưng nội dung hiển thị khác nhau. Cuộc tấn công yêu cầu khoảng 2^63 phép tính SHA-1 — khoảng 6.500 năm thời gian CPU đơn, nhưng khả thi trên cụm GPU trong vài tháng. Chi phí kể từ đó đã giảm thêm với các kỹ thuật cải tiến.
Sự khác biệt giữa SHA-1 và HMAC-SHA1 là gì?
SHA-1 là hàm băm đơn giản: hash = SHA1(message). HMAC-SHA1 là mã xác thực thông điệp có khóa: mac = HMAC(key, message). HMAC bọc hàm băm trong một cấu trúc ngăn chặn các cuộc tấn công mở rộng độ dài và yêu cầu khóa bí mật. Thú vị là, HMAC-SHA1 vẫn được coi là an toàn cho xác thực thông điệp mặc dù SHA-1 đã bị phá vỡ về khả năng chống va chạm, vì bảo mật HMAC phụ thuộc vào các thuộc tính hàm giả ngẫu nhiên của hàm nén, không phải khả năng chống va chạm.
Tôi nên dùng SHA-1 hay MD5 cho checksum tệp?
SHA-1 là lựa chọn tốt hơn MD5 cho checksum tệp. MD5 tạo ra giá trị băm 128-bit và đã bị phá vỡ từ năm 2004, với các cuộc tấn công va chạm thực tế hiện có thể thực hiện trong vài giây. SHA-1 tạo ra giá trị băm 160-bit và các cuộc tấn công va chạm của nó, dù đã được chứng minh, vẫn tốn kém hơn. Tuy nhiên, đối với bất kỳ hệ thống mới nào, hãy ưu tiên SHA-256 — nó cung cấp giá trị băm 256-bit không có cuộc tấn công thực tế nào được biết đến và được hỗ trợ tốt trên tất cả các nền tảng và ngôn ngữ.