Trình tạo Hash miễn phí

Tạo hash MD5, SHA-1, SHA-256, SHA-384, SHA-512.

Không có dữ liệu nào rời khỏi thiết bị của bạn

Kết quả

Về hàm băm

Một hàm băm mật mã nhận đầu vào kích thước tùy ý và sinh ra đầu ra kích thước cố định gọi là dấu vân tay, condensed hoặc hash. Cùng đầu vào luôn cho cùng hash; thay đổi một bit ở đầu vào tạo ra hash hoàn toàn khác ("hiệu ứng tuyết lở"); và hàm về mặt tính toán không thể đảo ngược, cho một hash, bạn không thể trên thực tế tìm lại đầu vào sinh ra nó. Ba tính chất chống va chạm làm cho hàm trở thành "mật mã": chống ảnh ngược (preimage) (cho hash h, không khả thi để tìm đầu vào m sao cho hash(m) = h), chống ảnh ngược thứ hai (second preimage) (cho m1, không khả thi để tìm m2 khác có cùng hash), và chống va chạm (collision) (không khả thi để tìm hai đầu vào khác nhau có cùng hash). Một hàm mất chống va chạm có thể vẫn an toàn cho một số dùng (kiểm tra toàn vẹn tệp) nhưng không cho dùng khác (chữ ký số). MD5 và SHA-1 đúng nằm ở loại đó: va chạm của chúng đã bị phá, nhưng ảnh ngược vẫn chưa.

Lược sử ngắn về MD5, SHA-1, SHA-2 và SHA-3

MD2 / MD4 / MD5 là tác phẩm của Ron Rivest tại MIT và RSA Data Security. MD2 phát hành 1989; MD4 năm 1990; MD5 phát hành năm 1991 và chuẩn hóa thành RFC 1321 tháng 4 năm 1992. MD5 là hash chiếm ưu thế trong một thập niên, mặc định cho checksum tải xuống, lưu trữ mật khẩu, khử trùng tệp và hệ thống địa chỉ theo nội dung. Cảnh báo đầu tiên đến năm 1995 khi Hans Dobbertin công bố một tấn công va chạm full-round trên MD4, tiền nhiệm của MD5; va chạm thực tế đầu tiên trên MD5 đầy đủ đến vào tháng 8 năm 2004 khi Wang và Yu công bố hai thông điệp 128 byte va chạm; Vlastimil Klima đẩy nhanh tìm kiếm va chạm MD5 từ hàng giờ xuống vài giây trên phần cứng phổ thông năm 2006. Marc Stevens, làm việc với các nhà nghiên cứu tại TU Eindhoven và EPFL, trình diễn một va chạm MD5 với prefix được chọn tại 25C3 tháng 12 năm 2008, sản xuất một chứng chỉ CA RapidSSL giả mạo được ký MD5. Đến lúc malware Flame năm 2012 dùng va chạm MD5 để giả mạo chứng chỉ Microsoft Update, MD5 đã hoàn toàn bị phá cho mọi mục đích nhạy cảm với bảo mật.

SHA ("Secure Hash Algorithm") là một họ của NSA Hoa Kỳ. SHA-0 phát hành thành FIPS 180 tháng 5 năm 1993 và bị thu hồi trong cùng năm vì các khiếm khuyết thiết kế không được công bố cụ thể. SHA-1 nối tiếp dưới FIPS 180-1 tháng 4 năm 1995, với một thay đổi một-bit trong message schedule mà NSA chưa bao giờ công khai giải thích. SHA-1 trở thành hash mặc định của cuối thập niên 1990 và 2000, được Git dùng cho hash commit, được chứng chỉ SSL/TLS dùng, được hầu hết mọi sơ đồ chữ ký dùng. Tấn công va chạm lý thuyết đầu tiên đến năm 2005 (Wang, Yin, Yu); va chạm freestart năm 2015 (Stevens, Karpman, Peyrin); và va chạm SHA-1 đầy đủ đầu tiên được giao ngày 23 tháng 2 năm 2017 dưới tên "SHAttered" (Stevens, Bursztein, Karpman, Albertini, Markov), tạo ra hai tệp PDF khác nhau có cùng hash SHA-1. Vào tháng 1 năm 2020 cuộc tấn công "SHA-1 is a Shambles" với prefix được chọn (Leurent và Peyrin, tổng chi phí khoảng USD 45.000 thuê GPU) đã làm việc giả mạo cấp chứng chỉ trở nên khả thi về chi phí, đẩy nhanh quá trình chuyển sang SHA-256 mà dự án Git đã bắt đầu lập kế hoạch từ 2018. SHA-1 nay chính thức bị NIST đánh dấu deprecated cho chữ ký số và chứng chỉ.

SHA-2 là họ thay thế SHA-1: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 và SHA-512/256, công bố trong FIPS 180-2 tháng 8 năm 2002. SHA-2 là thiết kế phòng thủ, đầu ra lớn hơn, nhiều vòng hơn, trạng thái nội bộ rộng hơn, và hai mươi ba năm sau, vẫn chưa bị phá. SHA-256 là mặc định hiện đại cho chữ ký số, chứng chỉ, JWT, hash khối Bitcoin, lưu trữ địa chỉ theo nội dung, và đa số việc kiểm tra toàn vẹn tệp. SHA-3 là một thiết kế khác về cơ bản, công trình kiến tạo bọt biển (sponge construction) Keccak của Bertoni, Daemen, Peeters và Van Assche, được chọn sau cuộc thi NIST kéo dài năm năm mở năm 2007 và Keccak thắng tháng 10 năm 2012; công bố trong FIPS 202 tháng 8 năm 2015. SHA-3 không phải thay thế cho SHA-2 (SHA-2 vẫn an toàn); nó là phương án thay thế phòng thủ với cấu trúc nội bộ hoàn toàn khác, để một sự phá vỡ phân tích mật mã trong tương lai đối với SHA-2 không nhất thiết ảnh hưởng đến SHA-3. Công cụ này tạo SHA-1, SHA-256, SHA-384 và SHA-512 (tập hợp được Web Crypto API hỗ trợ) cộng MD5 (qua một triển khai JavaScript, vì Web Crypto API cố ý bỏ MD5).

So sánh các thuật toán

Thuật toánĐầu raBảo mật
MD5128-bit (32 hex chars)Đã bị phá vỡ · không dùng cho bảo mật
SHA-1160-bit (40 hex chars)Yếu · không còn được khuyến nghị
SHA-256256-bit (64 hex chars)Mạnh · được khuyến nghị
SHA-384384-bit (96 hex chars)Mạnh
SHA-512512-bit (128 hex chars)Mạnh

Hash mật mã xuất hiện ở đâu

Phá va chạm vs phá ảnh ngược, vì sao MD5 vẫn được dùng

Nhầm lẫn thường gặp: nếu MD5 "đã bị phá", tại sao md5sum vẫn có trong mọi distro Linux? Câu trả lời nằm ở phân biệt giữa chống va chạm (đã phá với MD5) và chống ảnh ngược (vẫn nguyên với MD5). Tấn công va chạm cho phép kẻ tấn công dựng hai đầu vào khác nhau cùng hash; điều này quan trọng với chữ ký số (kẻ tấn công có thể chế tạo cặp va chạm, để một cái được ký, rồi thay bằng cái kia) và với mọi ứng dụng mà hàm được giả định gắn với một input cụ thể. Tấn công ảnh ngược, ngược lại, sẽ cho phép kẻ tấn công khôi phục input gốc từ một hash; đó là điều thực sự sẽ phá một checksum tải xuống, một hash mật khẩu, hoặc một định danh địa chỉ theo nội dung. Chống ảnh ngược của MD5 chưa bị phá; các tấn công ảnh ngược tốt nhất được công bố vẫn gần ngưỡng lý thuyết 2128, không khả thi về tính toán trên bất kỳ phần cứng nào tồn tại hoặc dự kiến. Vậy MD5 (và SHA-1) vẫn hợp pháp cho: kiểm tra toàn vẹn tệp khi bạn tin nguồn của hash công bố (kẻ tấn công có thể thay tệp thì có thể cũng thay được hash, nên mô hình mối đe dọa là "hỏng do tai nạn" chứ không phải "thay đổi cố ý"); khóa cache và khử trùng nơi bạn kiểm soát cả hai đầu; kiến tạo HMAC (HMAC-MD5 vẫn an toàn vì cấu trúc HMAC vững trước điểm yếu va chạm của MD5, dù HMAC-SHA-256 vẫn được ưu tiên cho mã mới). Nơi MD5 phải được thay thế: chữ ký số, hash chứng chỉ, mọi nơi kẻ tấn công có thể chế tạo input.

Web Crypto API và việc cố ý bỏ MD5

Trình duyệt hiện đại phơi bày việc băm qua crypto.subtle.digest(algorithm, data), một hàm bất đồng bộ trả về hash dưới dạng ArrayBuffer. Thuật toán được hỗ trợ: SHA-1, SHA-256, SHA-384, SHA-512. Hãy chú ý điều không có trong đó: MD5 cố ý bị bỏ. W3C Web Crypto Working Group đưa ra lựa chọn rõ ràng để MD5 ở ngoài, với lập luận rằng mọi việc dùng MD5 trong trình duyệt hoặc là legacy (xử lý tốt hơn bằng polyfill) hoặc là sai (không nên tạo điều kiện thuận lợi). Hỗ trợ MD5 của công cụ này đến từ một triển khai JavaScript nhỏ (~10 KB) nhúng vào trang; mọi thứ khác (SHA-1, SHA-256, SHA-384, SHA-512, cộng tất cả biến thể HMAC) đi qua Web Crypto để xử lý ở tốc độ native. Web Crypto API chỉ khả dụng trong ngữ cảnh bảo mật (HTTPS hoặc localhost), mở công cụ này trên HTTP thuần sẽ âm thầm vô hiệu hóa hash SHA.

Định dạng đầu ra: Hex, Base64, Base32

Hash về bản chất là nhị phân, một hash 256 bit là 32 byte dữ liệu mờ đục. Để hiển thị hoặc vận chuyển, người ta mã hóa thành văn bản. Hex (Base16) là mã hóa phổ biến nhất: mỗi byte thành hai ký tự hex, nên đầu ra SHA-256 là 64 ký tự hex. Phổ quát, dễ đọc, gấp đôi kích thước. Base64 đóng gói byte dày đặc hơn (3 byte → 4 ký tự); SHA-256 ở Base64 là 44 ký tự (có padding) hoặc 43 (không). Dùng trong JWT (chữ ký được mã hóa Base64URL), trong thuộc tính integrity của SRI, và mọi nơi mà sự gọn nhẹ quan trọng. Base32 (RFC 4648) dùng 32 ký tự loại bỏ những ký tự dễ nhầm về thị giác (không phân biệt 0/O, 1/I/L); dùng cho khóa bí mật TOTP, ULID và địa chỉ onion. Công cụ này tạo hex theo mặc định, định dạng phổ quát mà mọi công cụ khác đều hiểu.

HMAC, băm có khóa cho xác thực

HMAC (Hash-based Message Authentication Code) là một kiến tạo định nghĩa trong RFC 2104 (Krawczyk, Bellare, Canetti, tháng 2 năm 1997) biến mọi hàm băm mật mã thành mã xác thực thông điệp có khóa. Kiến tạo là HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m)), với K' là khóa dẫn xuất từ bí mật K, và opad/ipad là pad XOR cố định. Cấu trúc chứng minh được an toàn miễn là hash bên dưới an toàn, và đáng chú ý vẫn an toàn cả khi hash bên dưới có chống va chạm yếu (lý do HMAC-MD5 vẫn được coi là an toàn, và lý do HMAC-SHA1 vẫn ổn trong TLS dù va chạm SHA-1 đã bị phá). HMAC có ba mục đích chính: ký request API (AWS Signature v4, webhook GitHub, webhook Stripe), bên nhận xác minh request đến từ chủ sở hữu bí mật; toàn vẹn JWT (HS256 = HMAC-SHA-256); và dẫn xuất khóa từ mật khẩu (PBKDF2 dùng HMAC bên trong). Chế độ HMAC của công cụ này lấy một khóa bí mật và tạo HMAC của đầu vào dưới khóa đó.

Phạm vi trung thực: công cụ này dùng để làm gì và không làm gì

Công cụ này tính hash mật mã thô của một văn bản hoặc tệp đầu vào. Hữu ích cho: kiểm tra tải xuống tệp đối chiếu checksum công bố, sinh định danh địa chỉ theo nội dung, tính giá trị HMAC để debug API, so sánh toàn vẹn của hai bản sao của một tệp, và học input cụ thể hash thành gì. Không hữu ích cho: lưu trữ mật khẩu (hãy dùng hàm băm mật khẩu thực sự như Argon2id, scrypt hoặc bcrypt với salt và hệ số chi phí phù hợp); đảo ngược hash (đó là toàn bộ tinh thần của hàm băm và là không thể theo thiết kế); hoặc sinh hash SHA-3 / Keccak (công cụ hiện sinh SHA-1, SHA-256, SHA-384 và SHA-512 thuộc họ SHA-2, cộng MD5, SHA-3 nằm trong danh sách tính năng tương lai); sinh hash BLAKE2 hoặc BLAKE3. Cho BLAKE3 (hash hiện đại thông lượng cao cho lưu trữ địa chỉ theo nội dung), hãy dùng CLI chuyên dụng; cho lưu trữ mật khẩu, hãy dùng trực tiếp thư viện bcrypt/scrypt/Argon2id của ứng dụng bạn.

Quyền riêng tư: vì sao chỉ-trong-trình-duyệt quan trọng ở đây

Băm một tệp trên server đòi hỏi gửi tệp đi. Cho việc kiểm tra tải xuống thông thường thì không quan trọng, bạn vốn đã tin nguồn. Cho việc băm tài liệu nội bộ, giấy tờ tùy thân đã quét, ảnh chụp giao diện đang xây, hoặc bất kỳ tệp nào bạn không muốn bị sao vào ổ cứng của người lạ, băm phía server là một lỗ rò. Công cụ này đọc tệp trực tiếp trong trình duyệt qua File API và băm cục bộ, không gì rời khỏi thiết bị của bạn. Hãy kiểm chứng bằng cách mở tab Network của DevTools khi bạn bấm Băm, hoặc đặt trang offline (chế độ máy bay) sau khi đã tải xong và xác nhận công cụ vẫn hoạt động. Web Crypto API yêu cầu HTTPS nhưng không cần truy cập mạng lúc thực thi.

Câu hỏi thường gặp

MD5 được dùng để làm gì nếu nó đã bị phá vỡ?

MD5 vẫn được sử dụng rộng rãi cho các mục đích phi bảo mật: kiểm tra tính toàn vẹn của tệp (xác minh tải xuống), loại bỏ trùng lặp, khóa bộ nhớ đệm và tổng kiểm tra. Không bao giờ nên dùng nó cho việc băm mật khẩu hoặc chữ ký số.

Tôi có thể đảo ngược một hash để lấy lại văn bản gốc không?

Không. Các hàm băm được thiết kế là một chiều. Tuy nhiên, kẻ tấn công sử dụng các bảng được tính trước (bảng cầu vồng) để tra cứu các hash phổ biến. Đây là lý do tại sao mật khẩu nên được băm bằng các hàm băm chậm có muối như bcrypt, chứ không phải SHA-256 thô.

Tệp của tôi có được tải lên khi tôi băm nó không?

Không. Tệp được đọc trực tiếp trong trình duyệt của bạn bằng File API và được băm cục bộ bằng Web Crypto API (cho SHA) hoặc một triển khai JavaScript thuần túy (cho MD5). Không có gì được gửi tới bất kỳ máy chủ nào.

Khác biệt giữa SHA-256 và SHA-3 là gì?

SHA-256 thuộc họ SHA-2 (FIPS 180-2, tháng 8 năm 2002), kiến tạo Merkle-Damgård, do NSA thiết kế. SHA-3 (FIPS 202, tháng 8 năm 2015) là họ Keccak, kiến tạo bọt biển, do Bertoni, Daemen, Peeters và Van Assche thiết kế, được chọn sau cuộc thi công khai của NIST. SHA-3 không phải thay thế cho SHA-2 (SHA-2 vẫn an toàn); nó là phương án thay thế phòng thủ với cấu trúc nội bộ khác về cơ bản, để một sự phá vỡ giả định trong tương lai đối với SHA-2 không nhất thiết chạm tới SHA-3. Cho ứng dụng mới năm 2026, SHA-256 vẫn là mặc định đúng; SHA-3 ngày càng được dùng trong Ethereum và các sơ đồ hậu lượng tử. Công cụ này hôm nay hỗ trợ SHA-2 (SHA-1 / 256 / 384 / 512); SHA-3 trong danh sách tính năng tương lai.

HMAC là gì và khi nào tôi cần?

HMAC (Hash-based Message Authentication Code, RFC 2104, 1997) là một kiến tạo băm có khóa chứng minh thông điệp được tạo bởi ai đó biết bí mật chia sẻ. Bạn cần nó mỗi khi xác minh một request đến từ đúng bên, xác minh chữ ký webhook GitHub (bí mật là khóa ký webhook), chữ ký webhook Stripe, chữ ký request API AWS (Signature v4 là HMAC-SHA-256), hoặc chữ ký JWT (HS256 = HMAC-SHA-256). HMAC vẫn an toàn cả khi hash bên dưới có chống va chạm yếu, lý do HMAC-MD5 vẫn được coi là an toàn, nhưng HMAC-SHA-256 là mặc định hiện đại cho mã mới.

Tệp của tôi có bị tải lên khi tôi băm không?

Không. Tệp được đọc trực tiếp trong trình duyệt qua File API và băm cục bộ, qua Web Crypto API cho các thuật toán họ SHA, qua một triển khai JavaScript nhỏ cho MD5. Không gì đi qua mạng, hãy kiểm chứng trong tab Network của DevTools trong khi tính, hoặc đặt trang offline sau khi đã tải xong. An toàn cho việc băm tài liệu nội bộ, giấy tờ tùy thân đã quét, ảnh chụp giao diện đang xây, hoặc bất kỳ tệp nào bạn không muốn bị sao vào ổ cứng của người lạ.

Công cụ liên quan