Trình Trực quan Hóa Hàm Băm Chuỗi
Nhập văn bản để tính toán và so sánh trực quan các hash MD5, SHA-1, SHA-256 và SHA-512 với các khối màu.
Cách hoạt động
- Nhập văn bản của bạn: gõ hoặc dán bất kỳ chuỗi nào, mật khẩu, nội dung tệp, định danh hoặc bất kỳ văn bản nào để hash.
- Chọn một thuật toán: chọn MD5, SHA-1, SHA-256, SHA-384 hoặc SHA-512 theo nhu cầu của bạn.
- Sao chép hash: giá trị hash xuất hiện ngay tức thì. Sao chép nó để lưu trữ, so sánh hoặc xác minh.
Tại sao sử dụng trình tạo hash chuỗi?
Hashing biến bất kỳ chuỗi nào thành một dấu vân tay có độ dài cố định, riêng biệt cho nội dung của nó. Một ký tự thay đổi tạo ra một hash hoàn toàn khác. Điều này cần thiết để xác minh tính toàn vẹn của dữ liệu, lưu trữ mật khẩu một cách an toàn, tạo khóa cache, loại bỏ trùng lặp các bản ghi và tạo định danh dựa trên nội dung. Vì hashing là một chiều, không thể tìm lại văn bản gốc từ hash, điều này làm cho nó an toàn để lưu trữ dữ liệu nhạy cảm.
Tính năng
- Nhiều thuật toán: MD5, SHA-1, SHA-256, SHA-384 và SHA-512, tất cả trong một công cụ.
- Hashing thời gian thực: hash cập nhật tức thì khi nhập, không cần nhấp nút.
- Phân biệt hoa thường: « Hello » và « hello » tạo ra các hash khác nhau, theo thiết kế.
- Sao chép vào bộ nhớ tạm: sao chép hash bằng một cú nhấp.
- 100% trong trình duyệt: các chuỗi không bao giờ rời khỏi thiết bị của bạn, an toàn cho nội dung nhạy cảm.
Câu hỏi thường gặp
Nên chọn thuật toán hash nào?
Cho các sử dụng nhạy cảm (mật khẩu, chữ ký), sử dụng SHA-256 hoặc SHA-512. MD5 và SHA-1 đã bị phản đối về bảo mật nhưng vẫn hữu ích cho tổng kiểm tra và khóa cache, nơi không yêu cầu độ mạnh mã hóa.
Tôi có thể sử dụng công cụ này để hash mật khẩu để lưu trữ không?
Hash chuỗi cung cấp cho bạn một hash một chiều, nhưng để lưu trữ mật khẩu, cần sử dụng hàm dẫn xuất khóa như bcrypt, Argon2 hoặc PBKDF2 tích hợp salt và lặp lại. Các hash SHA đơn giản quá nhanh và dễ bị tấn công bằng bảng cầu vồng.
Hash có thể đảo ngược không?
Không. Các hàm hash là một chiều, không thể tìm lại chuỗi gốc từ hash của nó. Nếu hai chuỗi tạo ra cùng một hash (xung đột), đó là khuyết điểm của thuật toán. SHA-256 và SHA-512 không có xung đột thực tế nào được biết đến.
Lịch sử 35 năm của các hàm hash: từ MD5 đến BLAKE3
Các hàm hash mật mã đã tiến hóa qua một chuỗi dài các chu kỳ phá-và-thay thế. MD5 được Ronald Rivest xuất bản trong RFC 1321 (tháng 4 năm 1992) như là người kế thừa của MD4. Đầu ra 128 bit của nó được coi là đủ mạnh trong hơn một thập kỷ cho đến khi Wang và Yu xuất bản va chạm thực tế đầu tiên vào năm 2004. Đến năm 2008, các nhà nghiên cứu đã sử dụng các va chạm MD5 để giả mạo một cơ quan chứng chỉ SSL giả mạo. SHA-1 được NSA thiết kế và được NIST chuẩn hóa trong FIPS 180-1 (1995). Đầu ra 160 bit của nó đã đứng vững cho đến tháng 2 năm 2017, khi Google và CWI Amsterdam công bố cuộc tấn công SHAttered, tạo ra hai PDF có cùng hash SHA-1. Chi phí: khoảng 6.500 CPU-năm tương đương trên GPU. SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512), cũng từ NSA, được xuất bản trong FIPS 180-2 (tháng 8 năm 2002). Nó sử dụng cùng cấu trúc Merkle-Damgård như SHA-1 nhưng với các trạng thái lớn hơn và nhiều vòng hơn; không có cuộc tấn công thực tế nào tồn tại trên các phiên bản đầy đủ hôm nay. SHA-3 (Keccak, bởi Bertoni et al.) được NIST chọn sau một cuộc thi công khai và được chuẩn hóa trong FIPS 202 (tháng 8 năm 2015). SHA-3 sử dụng một cấu trúc xốp hoàn toàn khác, miễn nhiễm với các cuộc tấn công mở rộng độ dài ảnh hưởng đến SHA-2. Bên ngoài gia đình NIST, BLAKE2 (Aumasson et al., 2012) và BLAKE3 (2020) cung cấp bảo mật cấp SHA-3 với tốc độ của MD5; BLAKE3 hash một tệp 1 GB trong khoảng một giây trên một laptop hiện đại.
Thuật toán nào để chọn: bảng quyết định nhanh
- MD5 (128 bit). Bị phá vỡ từ năm 2004. Có thể chấp nhận cho các sử dụng phi bảo mật: cache busting, deduplication tệp nơi bạn kiểm soát cả hai phía, checksum chống lại hư hỏng ngẫu nhiên. Không bao giờ sử dụng cho mật khẩu, chữ ký, hoặc bất kỳ ngữ cảnh đối nghịch nào.
- SHA-1 (160 bit). Bị phá vỡ từ năm 2017 (SHAttered). Git vẫn sử dụng nó cho hash commit, nhưng vào tháng 3 năm 2017 Git bắt đầu nhúng phát hiện va chạm (SHA-1DC) để từ chối các mẫu tấn công đã biết. Tránh SHA-1 cho mã mới.
- SHA-256 (256 bit). Con ngựa làm việc hiện tại. Được sử dụng bởi Bitcoin, chứng chỉ TLS, chữ ký gói Linux, ký JWT (HMAC-SHA256), và hầu hết các API hiện đại. Nhanh trong phần cứng (tiện ích mở rộng Intel SHA, tiện ích mở rộng mật mã ARMv8). Lựa chọn mặc định cho việc hash đa năng.
- SHA-512 (512 bit). Cùng gia đình, đầu ra lớn hơn. Hơi nhanh hơn SHA-256 trên máy 64 bit vì trạng thái nội bộ của nó là 64 bit. Sử dụng khi bạn cần khả năng kháng va chạm thêm hoặc khi 256 bit cảm thấy hạn chế (hiếm).
- SHA-3 / Keccak (224/256/384/512 bit). Lựa chọn xốp được chuẩn hóa thay thế cho SHA-2. Chịu được các cuộc tấn công mở rộng độ dài ảnh hưởng đến SHA-2 (liên quan khi xây dựng hash có khóa mà không có HMAC). Chậm hơn trong phần mềm so với SHA-256 trên hầu hết các CPU nhưng miễn nhiễm với một lớp tấn công khác.
- BLAKE2 / BLAKE3. Các lựa chọn thay thế phi-NIST hiện đại. BLAKE3 là hash mật mã nhanh nhất được sử dụng rộng rãi, hash ở khoảng tốc độ memcpy nhờ song song. Được sử dụng trong
b3sum, IPFS, và giao thức VPN WireGuard. Chưa có trongcrypto.subtle, nhưng có sẵn qua thư viện.
Nơi hash thực sự được sử dụng
- Xác minh tính toàn vẹn tệp. Các bản phân phối Linux xuất bản tổng SHA-256 bên cạnh các bản tải xuống ISO để bạn có thể xác minh rằng tệp không bị hỏng trong quá trình truyền hoặc bị sửa đổi bởi một kẻ tấn công.
sha256sum -c ubuntu.sha256trong 10 giây. - Lưu trữ định địa chỉ nội dung. Git sử dụng SHA-1 (chuyển sang SHA-256) để xác định mọi commit, cây và blob. IPFS, hình ảnh Docker (sha256:...), và đường dẫn store Nix tất cả đều sử dụng định địa chỉ nội dung. Hash CHÍNH LÀ định danh.
- Khóa cache. Hash một URL hoặc yêu cầu được tuần tự hóa cung cấp cho bạn một khóa có độ dài cố định phù hợp với bất kỳ hệ thống lưu trữ nào. Stripe, GitHub, mọi CDN sử dụng điều này cho tra cứu cache.
- Deduplication. Các hệ thống sao lưu (Time Machine, Borg, Restic) hash các khối tệp và chỉ lưu trữ các khối duy nhất. Hai khối 4 KB giống nhau trên các tệp khác nhau ánh xạ tới một đoạn được lưu trữ.
- HTTP ETags. Máy chủ web gửi hash của phản hồi dưới dạng header
ETag. Trình duyệt gửi lại vớiIf-None-Match; máy chủ trả về 304 nếu không thay đổi. Tiết kiệm các bản tải xuống dư thừa. - Chữ ký JWT và webhook. JSON Web Tokens ký payload của họ bằng HMAC-SHA256 (HS256 trong spec). Stripe, GitHub, webhook Twilio đều ký payload của họ để bạn có thể xác minh rằng chúng không bị giả mạo trong quá trình truyền.
- Blockchain. Bitcoin sử dụng SHA-256 kép cho proof-of-work và liên kết khối. Ethereum sử dụng Keccak-256 (một biến thể SHA-3). Toàn bộ khái niệm blockchain dựa trên tính chất rằng việc tìm hai đầu vào với cùng một hash là không khả thi về mặt tính toán.
Những sai lầm hash mất tiền hoặc phá vỡ mọi thứ
- Sử dụng hash SHA cho lưu trữ mật khẩu. SHA-256 nhanh: một GPU hiện đại tính toán ~10 tỷ hash SHA-256 mỗi giây. Với một cơ sở dữ liệu bị rò rỉ, một kẻ tấn công có thể thử mọi từ trong từ điển cộng với tất cả các biến đổi phổ biến trong vài phút. Sử dụng Argon2id (người chiến thắng Password Hashing Competition 2015), bcrypt, hoặc scrypt. Chúng cố ý chậm và đòi hỏi nhiều bộ nhớ.
- Quên muối. Ngay cả với một hash chậm, cùng một mật khẩu được hash mà không có muối tạo ra cùng một đầu ra giữa các người dùng, cho phép bảng cầu vồng và phát hiện kênh phụ các mật khẩu trùng lặp. Luôn lưu trữ một muối ngẫu nhiên mỗi người dùng bên cạnh hash.
- Tấn công mở rộng độ dài trên SHA-2.
hash(secret + message)với SHA-256 dễ bị tấn công: một kẻ tấn công biết hash và độ dài củasecretcó thể thêm dữ liệu tùy ý và tính hash kết quả mà không cần biếtsecret. Thay vào đó sử dụng HMAC-SHA256. SHA-3 và BLAKE2/3 miễn nhiễm. - So sánh chuỗi trong thời gian không đổi. So sánh hash (hoặc bất kỳ giá trị bí mật nào) với
==trong JavaScript làm rò rỉ thông tin qua thời gian: một hàm thoát tại byte không khớp đầu tiên cho phép kẻ tấn công học hash đúng từng byte qua nhiều yêu cầu. Sử dụngcrypto.timingSafeEqualtrong Node,hmac.compare_digesttrong Python. - Hash chuỗi mà không chỉ định mã hóa.
sha256("hello")trong Python 3 báo lỗi (bạn cần byte); trong Node mặc định UTF-8; trong PHP và Java mặc định có thể khác nhau. Các mã hóa khác nhau tạo ra các hash khác nhau. Luôn mã hóa rõ ràng dưới dạng UTF-8 trước khi hash. - Cắt ngắn hash cho «ID ngắn». Một lát 64 bit của SHA-256 thuận tiện cho các ID ngắn nhưng nghịch lý sinh nhật có nghĩa là va chạm xuất hiện ở ~2³² mục (khoảng 4 tỷ), không phải 2⁶⁴. Nếu bạn cắt ngắn, lập kế hoạch xử lý va chạm ở quy mô mong đợi.
- Xử lý đầu ra hash như chuỗi an toàn URL. Byte hash thô không thể in được. Sử dụng hex (phổ biến nhất) hoặc base64url. Base64 chuẩn chứa
+và/bị hỏng trong URL và tên tệp; base64url là biến thể an toàn.
Các câu hỏi thường gặp khác
Tại sao MD5 và SHA-1 «bị phá» nếu chúng vẫn tạo ra hash?
«Bị phá» có nghĩa là kẻ tấn công có thể tạo ra va chạm nhanh hơn vũ lực thô. Đối với MD5, việc tìm hai đầu vào với cùng một hash mất vài giây trên một laptop hôm nay. Đối với SHA-1, nó mất 6.500 CPU-năm vào năm 2017 và đã giảm đáng kể từ đó. Các hash vẫn hoạt động cơ học; những gì bị phá vỡ là sự đảm bảo an ninh rằng chúng «kháng va chạm». Đối với việc sử dụng không đối nghịch (checksum một tệp bạn tin tưởng chống hư hỏng ngẫu nhiên) MD5 vẫn hoạt động tốt. Đối với bất kỳ điều gì liên quan đến đối thủ, cả hai đều không an toàn.
Tôi có nên lo lắng về máy tính lượng tử phá vỡ SHA-256 không?
Ít hơn bạn có thể nghĩ. Thuật toán Grover tăng tốc các cuộc tấn công preimage chống lại một hash 256 bit từ 2²⁵⁶ đến 2¹²⁸ công việc tương đương cổ điển, vẫn thực tế không thể. Các nguyên thủy đối xứng (hash, AES) sống sót sau tính toán lượng tử bằng cách nhân đôi kích thước khóa/đầu ra. Mật mã khóa công khai (RSA, ECDSA) là cái rơi khó vào các cuộc tấn công lượng tử, do đó các tiêu chuẩn hậu lượng tử NIST được xuất bản vào tháng 8 năm 2024 (ML-KEM, ML-DSA, SLH-DSA). Nếu bạn đang sử dụng SHA-256 hôm nay, SHA-512 trong kỷ nguyên hậu lượng tử sẽ hơn đủ.
Sự khác biệt giữa hash và HMAC là gì?
Một hash (SHA-256) không khóa: bất kỳ ai có đầu vào đều có thể tính cùng đầu ra. Một HMAC (Hash-based Message Authentication Code) bao gói hash bằng một khóa bí mật, vì vậy chỉ có ai đó biết khóa mới có thể tính hoặc xác minh tag. Được định nghĩa trong RFC 2104 (1997), HMAC là cách chuẩn để «ký» một tin nhắn đối xứng (người gửi và người nhận chia sẻ một bí mật). Sử dụng HMAC-SHA256 cho chữ ký webhook, JWT HS256, ký yêu cầu API. SHA-256 đơn giản trên secret + message không an toàn do mở rộng độ dài.
Tại sao các thư viện khác nhau cho các hash khác nhau cho cùng một chuỗi?
Ba nguyên nhân phổ biến. Đầu tiên, mã hóa ký tự: UTF-8 vs UTF-16 vs Latin-1 cho các byte khác nhau cho các chuỗi không phải ASCII, do đó các hash khác nhau. Luôn mã hóa rõ ràng. Thứ hai, kết thúc dòng: "hello\n" và "hello\r\n" hash khác nhau; checksum tệp Windows-vs-Unix thường khác nhau vì lý do này. Thứ ba, định dạng đầu ra: hex chữ thường vs hex chữ hoa vs base64 trông như một giá trị khác nhưng đại diện cho cùng byte. Chuẩn hóa định dạng đầu vào và đầu ra trước khi so sánh.
Đầu vào của tôi có được gửi đến một máy chủ khi tôi hash ở đây không?
Không. Tất cả bốn hash được tính trong trình duyệt của bạn bằng API Web Crypto tích hợp (crypto.subtle.digest). Mở tab Mạng trong DevTools và nhập vào đầu vào, bạn sẽ thấy không có yêu cầu đi ra. An toàn cho thông tin xác thực, token, hoặc bất kỳ giá trị riêng tư nào bạn muốn hash mà không rời khỏi thiết bị của mình.