Trình tạo hash

Tính digest của bất kỳ văn bản hay tệp nào bằng MD5, SHA-1, SHA-256, SHA-384, SHA-512, SHA-3, Keccak-256, RIPEMD-160, BLAKE2b hoặc BLAKE2s — tiện cho checksum, kiểm tra toàn vẹn và khóa bộ nhớ đệm. Dán một digest mong đợi để so với đầu vào của bạn, hoặc dán một chuỗi băm chưa biết để nhận dạng thuật toán có khả năng đã tạo ra nó. SHA-1/256/384/512 đến từ WebCrypto gốc của trình duyệt; các thuật toán còn lại là triển khai JavaScript thuần tự chứa, nên mọi thứ chạy cục bộ. Xem thêm Trình tạo số ngẫu nhiên cho các dãy ngẫu nhiên có hạt giống.
Chạy hoàn toàn cục bộ — không có gì được tải lên. Đầu vào tối đa 200 MB.
Đầu vào: Thuật toán:
Định dạng đầu ra: SHA-1 là thuật toán cũ — hãy ưu tiên SHA-256/512 trừ khi bạn cần nó.
Các dòng digest có dạng “THUẬT TOÁN  hash” để bạn có thể sao chép vào ghi chú phát hành hoặc manifest tải xuống.
Dán digest mà trang tải xuống hoặc manifest đã cung cấp. Công cụ chấp nhận chữ hoa/thường, khoảng trắng, dấu hai chấm, tiền tố kiểu sha256=, các dạng bao như MD5 (file.exe) = và đầu ra md5sum nhiều dòng, rồi so với các thuật toán bạn đã đánh dấu ở trên.
Dán một chuỗi băm chưa biết. Công cụ đọc độ dài, tập ký tự và tiền tố của nó, rồi liệt kê các thuật toán có thể đã tạo ra nó — từ digest hex thuần đến các băm mật khẩu kiểu PHC như $2b$… hoặc $argon2id$….
Chọn thuật toán:
SHA-256 là mặc định hợp lý cho kiểm tra toàn vẹn ngày nay. SHA-512 mạnh hơn và chạy nhanh hơn trên phần cứng 64-bit, với cái giá là đầu ra dài hơn; SHA-384 là lựa chọn ở giữa khi bạn cần digest SHA-2 với độ dài bị cắt. SHA-3 là một tiêu chuẩn NIST được thiết kế độc lập (không phải bản nâng cấp của SHA-2) và là câu trả lời chuẩn khi bạn muốn một thuật toán không chia sẻ dòng dõi với SHA-2; Keccak-256 là biến thể trước chuẩn được Ethereum và một vài hệ thống khác dùng, và khác SHA3-256 ở một byte đệm. BLAKE2b/BLAKE2s là các hàm băm hiện đại nhanh, được thiết kế cho phần mềm; RIPEMD-160 là một thiết kế cũ hơn vẫn được dùng trong ngữ cảnh Bitcoin và OpenPGP. SHA-1 và MD5 đã bị phá về mặt mật mã đối với đầu vào thù địch nhưng vẫn đúng và được dùng rộng rãi để khử trùng lặp, cho hệ thống cũ và checksum không đối kháng — đừng bao giờ dùng chúng khi kẻ tấn công có thể chọn nội dung. Không hàm băm nào hôm nay là “kháng lượng tử” theo nghĩa máy tính lượng tử đe dọa chữ ký và trao đổi khóa trước tiên — thuật toán Grover chỉ làm giảm một nửa độ dài băm hiệu dụng, nên SHA-256 đã nằm thoải mái trên ngưỡng thực tế. Băm mang tính xác định: cùng một byte luôn cho cùng một digest, đó chính là điều khiến chúng hữu ích để kiểm tra một bản tải xuống hay tệp cấu hình còn nguyên vẹn.
Đang tìm băm quốc gia Trung Quốc?
SM3 (GB/T 32905-2016), digest được quy định trong mật mã thương mại Trung Quốc, không thuộc trang này — nó có công cụ riêng với hỗ trợ HMAC-SM3 tại trang Trình tạo băm SM3, cùng với các công cụ còn lại của bộ SM: SM4 (mã khối), SM2 (chữ ký và mã hóa) và SM9 (mật mã dựa trên danh tính).
Trình tạo băm — mọi thuật toán được giải thích từ đầu
Trong một câu: hàm băm mật mã là một máy xay một chiều — nó nhận bất kỳ số byte nào và nén chúng thành một dấu vân tay độ dài cố định, sao cho cùng đầu vào luôn cho cùng dấu vân tay, nhưng dấu vân tay không cho bạn biết cách dựng lại đầu vào. Trang này chạy mười một thuật toán như vậy hoàn toàn trong tab trình duyệt của bạn.

Mỗi thuật toán dưới đây được giải thích theo cùng bốn bước: nó là gì bằng lời đơn giản, trực giác về cách hoạt động mà không cần công thức, có nên vẫn dùng ngày nay không, và những lỗi mà người ta hay mắc nhất khi dùng nó.

MD5

Đây là gì. MD5 (1992) nén mọi đầu vào thành một dấu vân tay 128-bit (32 ký tự hex). Nó được thiết kế để nhanh trên các máy tính của những năm 1990, và đúng là như vậy — chính vì thế nó vẫn có ở khắp nơi: trang tải phần mềm, bộ nhớ đệm khử trùng tệp, khóa cơ sở dữ liệu cũ.

Cách hoạt động, một cách trực quan. Đầu vào được cắt thành các khối 64 byte. Mỗi khối được khuấy vào một trạng thái lăn 128-bit bốn lần (bốn vòng trộn hơi khác nhau), và sau khối cuối cùng trạng thái được in ra thành digest. Việc khuấy được xây từ phép cộng, phép xoay và tra bảng — rẻ ngày đó, rẻ bây giờ.

Có nên dùng không? Với checksum mà không ai đang cố lừa bạn — phát hiện tải xuống bị hỏng, tìm tệp trùng — thì có, nó vẫn báo hỏng rất chính xác. Với mọi thứ có tính đối kháng, không: từ năm 2004 các nhà nghiên cứu có thể tạo hai tệp khác nhau có cùng MD5 chỉ trong vài giây, và các vụ giả mạo chứng chỉ thật sự dùng va chạm MD5 đã xảy ra năm 2008. Hãy coi nó như một số seri, không phải một ổ khóa.

Lỗi thường gặp. Dùng MD5 cho mật khẩu (quá nhanh — xem Trình tạo băm mật khẩu để biết thứ gì phù hợp hơn); tin một tệp vì “MD5 khớp” trong khi kẻ tấn công cũng đã công bố MD5; và dán cả dòng MD5 (file) = hash thay vì chỉ mã băm — ô Xác minh ở trên chấp nhận cả hai.

SHA-1

Đây là gì. SHA-1 (1995, NSA) tạo ra digest 160-bit (40 ký tự hex). Trong hai mươi năm, đây là hàm băm toàn vẹn mặc định của Git, chứng chỉ TLS và chữ ký PGP.

Cách hoạt động, một cách trực quan. Công thức cùng họ với MD5 nhưng có trạng thái 160-bit, 80 vòng trộn mỗi khối 64 byte, và một tập phép toán rộng hơn. Các vòng thêm vào được dùng để máy xay khó bị dịch ngược hơn.

Có nên dùng không? Không, với mọi việc có tính đối kháng. Phần bị phá trên lý thuyết trở nên thực tế vào năm 2017 khi Google tạo ra hai tệp PDF khác nhau có cùng giá trị SHA-1 (tấn công SHAttered, khoảng 6500 năm CPU). Git vẫn lưu đối tượng dưới SHA-1 nhưng chỉ coi nó như một định danh, và từ đó đã thêm phát hiện va chạm. Với công việc mới, hãy dùng SHA-256 hoặc SHA-3.

Lỗi thường gặp. Tin rằng 160 bit “vẫn đủ dài” — việc bị phá nằm ở cấu trúc bên trong, không phải ở vét cạn; và nhầm RIPEMD-160 với SHA-1 vì cả hai đều dài 40 ký tự hex (ô nhận dạng ở trên phân biệt chúng).

SHA-2: SHA-256, SHA-384 và SHA-512

Đây là gì. Họ SHA-2 (2001, NSA) là con ngựa thồ của kiểm tra toàn vẹn hiện đại. SHA-256 cho 256 bit (64 ký tự hex), SHA-512 cho 512 bit, còn SHA-384 là SHA-512 với kết quả được cắt còn 384 bit — hữu ích khi một giao thức bắt buộc thẻ ngắn hơn.

Cách hoạt động, một cách trực quan. Các khối 64 byte (hoặc 128 byte với biến thể 512-bit) được gấp vào một trạng thái 8 từ qua 64 (hoặc 80) vòng các bước cộng-xoay-trộn. Không như MD5, lịch trình trước hết kéo dài mỗi khối thành một bộ đệm mở rộng, và đó là điều đã đánh bại kiểu tấn công từng phá MD5 và SHA-1. Một điều thú vị: trên CPU 64-bit SHA-512 nhanh hơn SHA-256, vì nó xử lý gấp đôi dữ liệu mỗi vòng bằng phép toán 64-bit.

Có nên dùng không? Có — SHA-256 là câu trả lời mặc định cho checksum tệp, ký mã và dấu vân tay chứng chỉ ngày nay, chưa có phá vỡ thực tế nào được biết sau hai thập kỷ phân tích. Dùng SHA-384/512 khi bạn muốn biên an toàn lớn hơn hoặc khi nền tảng chạy chúng nhanh hơn.

Lỗi thường gặp. Chỉ dùng SHA-256 cho mật khẩu — nó là một hàm băm nhanh, và tốc độ là kẻ thù ở đó (dùng bcrypt/scrypt/Argon2id); và nhầm độ dài digest với độ mạnh khi nói tới kháng va chạm đối kháng — độ dài chỉ đặt trần.

SHA-3 (SHA3-256 / SHA3-512) và Keccak-256

Đây là gì. SHA-3 (2015, được chuẩn hóa từ bản đệ trình Keccak bởi Bertoni, Daemen, Peeters và Van Assche) là tiêu chuẩn băm thứ ba của NIST. Nó không chia sẻ gì với cấu trúc bên trong của SHA-2 — được chọn chính vì đây là một phương án dự phòng độc lập, đề phòng SHA-2 có ngày bị phá.

Cách hoạt động, một cách trực quan. Thay vì khuấy các khối qua một trạng thái nhỏ, Keccak lặp đi lặp lại kiểu “thấm và vắt”: đầu vào được hấp thụ từng bit vào một bọt biển 5×5×64-bit, toàn bộ bọt biển được xáo bởi một hoán vị cố định (24 vòng phép toán theo bit trên toàn bộ trạng thái), rồi các bit digest được vắt ra. Hình ảnh bọt biển là toàn bộ ý tưởng: các bit dung lượng không bao giờ được xuất ra, và chính chúng khiến hàm có tính một chiều.

Keccak-256 so với SHA3-256. Chúng khác nhau đúng một byte đệm. Bản đệ trình gốc của nhóm Keccak đệm khối cuối bằng 0x01; NIST đã đổi đệm chuẩn thành 0x06 (phân tách miền mà việc dùng Keccak thời SHA-2 áp dụng). Ethereum áp dụng đệm gốc, nên “keccak256” của nó khác SHA3-256 tiêu chuẩn với mọi đầu vào. Trang này cung cấp cả hai, đánh dấu riêng từng cái.

Có nên dùng không? Có — hoặc như lựa chọn chính khi chính sách yêu cầu một thuật toán không thuộc SHA-2, hoặc ở bất cứ đâu hệ sinh thái đã dùng nó. Lỗi thường gặp: cho rằng SHA3-256 và Keccak-256 có thể thay thế cho nhau (không phải — hãy so hai dòng mà trang này tạo ra cho cùng một đầu vào); và cho rằng “SHA-3” thay thế SHA-2 — cả hai đều an toàn, SHA-2 vẫn được triển khai rộng rãi hơn.

RIPEMD-160

Đây là gì. RIPEMD-160 (1996, của tổ chức RIPE gồm các học giả châu Âu, được củng cố bởi Dobbertin, Bosselaers và Preneel) cho đầu ra 160 bit. Đây là một thiết kế hoàn toàn của châu Âu, cố ý độc lập với họ SHA do NSA thiết kế.

Cách hoạt động, một cách trực quan. Mỗi khối 64 byte được xử lý bởi hai dòng song song gồm 80 vòng với các hằng số và lượng xoay khác nhau; cuối cùng hai dòng và trạng thái cũ được kết hợp. Cấu trúc hai luồng là cách các nhà thiết kế chống lại các tấn công vi sai đang phá các hàm băm thập niên 1990 khác.

Có nên dùng không? Trong thực tế nó chủ yếu tồn tại bên trong các hệ thống khác: địa chỉ Bitcoin băm khóa công khai bằng RIPEMD-160(SHA-256(pk)), khóa OpenPGP cũ đưa nó như một tùy chọn băm, và nó là hàm băm truyền thống cho các mảnh BitTorrent v1 cùng với SHA-1. Nó không có tấn công va chạm thực tế, nhưng kích thước 160-bit khiến nó có biên an toàn nhỏ nhất trên trang này. Với việc dùng độc lập mới, hãy ưu tiên SHA-256 hoặc SHA-3.

Lỗi thường gặp. Tin rằng hai dòng song song khiến nó “mạnh gấp đôi” — kích thước đầu ra mới là thứ giới hạn khả năng kháng va chạm; và nhầm nó với SHA-1 (cùng độ dài 40 ký tự hex; ô nhận dạng ở trên liệt kê cả hai khả năng cạnh nhau).

BLAKE2b-512 và BLAKE2s-256

Đây là gì. BLAKE2 (2013, Aumasson, Neves, Wilcox-O’Hearn và Winnerlein) là một hàm băm được thiết kế cho tốc độ phần mềm: BLAKE2b nhắm tới nền tảng 64-bit với đầu ra tối đa 512-bit, BLAKE2s nhắm tới nền tảng 32-bit với đầu ra tối đa 256-bit.

Cách hoạt động, một cách trực quan. Nó kế thừa từ BLAKE, một ứng viên chung kết của SHA-3, mà lõi là một hoán vị có khóa mượn từ mật mã dòng ChaCha: một ma trận 4×4 các từ được xáo trộn bằng cách xen kẽ các bước trộn theo cột và theo đường chéo — giống như xáo một lưới trước theo chiều từ trên xuống, rồi theo các đường chéo — trong 12 vòng (BLAKE2b) hoặc 10 vòng (BLAKE2s) mỗi khối. Vì các bước đó ánh xạ rất đẹp lên các lệnh CPU, BLAKE2 thường nhanh hơn MD5 trong khi có độ an toàn tương đương SHA-3.

Có nên dùng không? Có — đây là một thiết kế hiện đại, chưa bị phá vỡ, phổ biến trong phần mềm nhạy cảm về hiệu năng (toàn vẹn gói trong một số hệ sinh thái, lưu trữ theo nội dung, khử trùng lặp khi sao lưu) và như một MAC nhanh. Trên trang này, BLAKE2b-512 cho digest dài nhất còn BLAKE2s-256 là lựa chọn hiện đại gọn nhẹ.

Lỗi thường gặp. Nghĩ rằng “nhanh hơn thì phải yếu hơn” — BLAKE2 nhanh hơn do được thiết kế như vậy, không phải do cắt góc; và không nhận ra BLAKE2 cũng nhận một khóa (biến nó thành MAC) hoặc một chuỗi cá nhân hóa — trang này luôn dùng nó ở chế độ không khóa.

Đọc ô Xác minh và Nhận dạng

Xác minh. Ô xác minh chuẩn hóa mọi thứ bạn dán — chữ hoa hay thường, dấu hai chấm sau mỗi hai chữ số, tiền tố sha256=, dạng bao kiểu BSD SHA256 (file) = hash, dòng md5sum của GNU với tên tệp sau mã băm, và \r\n thừa — rồi tính lại mọi thuật toán được đánh dấu trên đầu vào hiện tại của bạn (văn bản hoặc tệp đã chọn) và báo từng thuật toán khớp. Kết quả khớp màu xanh nghĩa là “những byte này chính xác là thứ nhà phát hành đã băm”; màu đỏ nghĩa là không thuật toán nào được đánh dấu tạo ra nó — hãy thử đánh dấu thêm thuật toán, hoặc kiểm tra xem bản dán có bị cắt ngắn không.

Nhận dạng. Ô nhận dạng không băm gì cả; nó đọc hình dạng của chuỗi. Độ dài thu hẹp các ứng viên: 32 ký tự hex có thể là MD5, 40 có thể là SHA-1 hoặc RIPEMD-160, 64 có thể là SHA-256 / SHA3-256 / Keccak-256 / BLAKE2s-256, 96 là SHA-384, 128 là SHA-512 / SHA3-512 / BLAKE2b-512. Tiền tố tiết lộ băm mật khẩu ($2a$/$2b$/$2y$ bcrypt, $argon2id$, $scrypt$, $6$ sha512crypt, $1$ MD5-crypt) — đó là một loài khác (xem Trình tạo băm mật khẩu) và trang này cố ý không tính chúng. Một chuỗi có +, / và = với độ dài là bội của 4 thì nhiều khả năng là dữ liệu Base64 hơn là digest hex; công cụ giải mã nó và báo độ dài byte tương ứng.

Nhận dạng cho bạn biết được gì và không biết được gì. Độ dài và tập ký tự là dấu vân tay của định dạng, không phải bằng chứng của thuật toán: hai chuỗi 64 ký tự hex có thể đến từ SHA-256 hoặc từ SHA-512 bị cắt ngắn. Bộ nhận dạng xếp hạng các khả năng; ô Xác minh mới là nơi chứng minh byte của bạn thực sự khớp với thuật toán nào.

Tất cả mười một thuật toán trong một cái nhìn
Thuật toán Cắt Ví dụ hư cấu Digest của “The quick brown fox jumps over the lazy dog”
MD5128 bit19929e107d9d372bb6826bd81d3542a419d6
SHA-1160 bit19952fd4e1c67a2d28fced849ee1bb76e7391b93eb12
SHA-256256 bit2001d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
SHA-384384 bit2001ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1
SHA-512512 bit200107e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
SHA3-256256 bit201569070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04
SHA3-512512 bit201501dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450
Keccak-256256 bittrước 20154d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15
RIPEMD-160160 bit199637f332f68db77bd9d7edd4969571ad671cf9dd3b
BLAKE2b-512512 bit2013a8add4bdddfd93e4877d2746e62817b116364a1fa7bc148d95090bc7333b3673f82401cf7aa2e4cb1ecd90296e3f14cb5413f8ed77be73045b13914cdcd6a918
BLAKE2s-256256 bit2013606beeec743ccbeff6cbcdf5d5302aa855c256c29b88c8ed331ea1a6bf3c8812

Mọi digest trong bảng trên đều được tạo bởi chính các engine của trang này — đánh dấu mọi thuật toán, nhấn Mẫu, và so sánh. Các dòng SHA-3, Keccak, RIPEMD-160 và BLAKE2 đến từ nhân crypto-shared.js tự lưu trữ được dùng trong các công cụ mật mã của trang web này.

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

Nên tin ô nào khi tải một tệp? Ô Xác minh, với SHA-256 được đánh dấu — hầu hết nhà phát hành ngày nay ký bằng SHA-256 hoặc SHA-512. Ô Nhận dạng chỉ liệt kê các ứng viên; nó không bao giờ chứng minh được điều gì về tệp của bạn.

Vì sao Keccak-256 lại có trong danh sách? Vì Ethereum, Swarm và một vài hệ thống sổ cái đã chuẩn hóa theo phần đệm trước chuẩn. Nếu bạn xác minh một keccak256 của Ethereum, bạn phải dùng dòng đó, không phải SHA3-256.

Hai đầu vào khác nhau có thể có chung một digest không? Về lý thuyết, có — vô số đầu vào ánh xạ vào một tập hữu hạn các digest (nguyên lý chuồng bồ câu). Trong thực tế, việc tìm ra một cặp như vậy trước khi vũ trụ nguội đi là điều mà “kháng va chạm” nói đến, và mọi thuật toán ở trên ngoại trừ MD5 và SHA-1 vẫn đứng vững.

Băm có phải là mã hóa không? Không. Mã hóa có thể đảo ngược với một khóa; băm là một máy xay một chiều. Không có gì trên trang này có thể “giải mã” ngược lại thành văn bản của bạn — và đó là tính năng, không phải hạn chế.