Tạo mã hash
MD5, SHA-1, SHA-256, SHA-384 và SHA-512, cho văn bản hoặc cho file ở mọi dung lượng. Hữu ích để kiểm tra file tải về có khớp với checksum đã công bố hay không. Không lưu trữ gì cả.
- Không bao giờ lưu trữ
- Không xếp hàng, không phải chờ
- Không cần đăng ký, không watermark
Văn bản được tính mã hash dưới dạng UTF-8. Thả một file vào nếu muốn kiểm tra file đã tải về.
Cách hoạt động
Dán văn bản hoặc thả file
Văn bản được tính mã hash dưới dạng UTF-8. File được đọc và tính mã hash ngay tại đây; không bao giờ bị lưu trữ.
Xem mọi mã hash cùng lúc
Cả năm thuật toán được tính cùng nhau, nên bạn không cần biết trước mình cần cái nào.
So sánh với giá trị mong đợi
Dán checksum bạn được cung cấp và công cụ sẽ đối chiếu giúp bạn — so từng ký tự bằng mắt là lúc dễ sai sót nhất.
Mã hash chứng minh được gì, và không chứng minh được gì
Mã hash là một dấu vân tay có độ dài cố định của một lượng dữ liệu bất kỳ, và nó có hai đặc tính đáng nói cho chính xác. Nó là một chiều — không có phép toán nào biến mã hash ngược lại thành dữ liệu, vì gần như toàn bộ thông tin đã mất. Và nó nhạy: đổi một bit của đầu vào là khoảng một nửa số bit của đầu ra thay đổi. Chính điều đó làm nó hữu ích để xác nhận một file đã tải về nguyên vẹn, hoặc hai file giống nhau mà không cần so sánh từng byte.
MD5 và SHA-1 đã bị phá và vẫn có mặt ở đây, vì một lý do. Cả hai đều có tấn công va chạm thực tế — MD5 từ năm 2004, SHA-1 được chứng minh bằng một cặp file PDF thật vào năm 2017 — nghĩa là ai đó có thể tạo ra hai file khác nhau có cùng mã hash. Vì vậy cả hai đều không chứng minh được gì trước một kẻ cố ý gian lận. Nhưng cả hai vẫn hoàn toàn tốt trong việc phát hiện hư hỏng ngẫu nhiên, và rất nhiều phần mềm thực tế vẫn công bố checksum MD5, nên đối chiếu một mã như vậy với file tải về là nhu cầu chính đáng. Hãy dùng SHA-256 cho mọi trường hợp có thể có người đang cố lừa bạn.
Đừng bao giờ dùng bất kỳ hàm nào trong số này để hash mật khẩu. Đây là điều quan trọng nhất trên trang. Hàm hash được thiết kế để chạy nhanh, và nhanh lại chính là điều sai với mật khẩu: một card đồ họa hiện đại tính được hàng tỷ mã SHA-256 mỗi giây, nên một cơ sở dữ liệu mật khẩu đã hash bị đánh cắp sẽ bị bẻ khóa trong vài giờ. Lưu trữ mật khẩu cần một hàm cố ý chạy chậm với salt riêng cho từng người dùng — argon2, bcrypt hoặc scrypt — được xây dựng để tốn thời gian và bộ nhớ một cách có chủ đích. Một mã SHA-256 trơn của mật khẩu là một lỗ hổng, không phải sự bảo vệ, dù nó trông thế nào trong một cột cơ sở dữ liệu.
Đối chiếu mã hash bạn tính được với mã được công bố ngay trên trang mà bạn tải file về chứng minh được ít hơn bạn tưởng: ai thay được file thì cũng thay được con số bên cạnh nó. Checksum có giá trị nhất khi nó đến từ nơi khác — một bản phát hành có chữ ký, một kênh riêng, một giá trị mà chính bạn đã ghi lại trước đó.
Khi bạn cần công cụ khác
Trên dòng lệnh, việc này chỉ cần một lệnh: shasum -a 256 file trên macOS và Linux, certutil -hashfile file SHA256 trên Windows, và md5sum hoặc sha1sum khi thứ được công bố là checksum kiểu cũ. Chúng xử lý file theo luồng thay vì nạp toàn bộ, nên không có giới hạn dung lượng — đó là khác biệt thực sự với mọi file trên vài trăm megabyte, khi một trang web giữ toàn bộ file trong bộ nhớ sẽ đơn giản là lỗi.
Để xác minh một bản phát hành là thật chứ không chỉ nguyên vẹn, riêng mã hash là công cụ sai. Chữ ký GPG — gpg --verify file.sig file — chứng minh ai đã tạo ra file, câu hỏi mà checksum không trả lời được. Phần lớn các dự án nghiêm túc công bố cả hai, và chữ ký mới là thứ quan trọng.
Câu hỏi thường gặp
File của tôi có bị lưu ở đâu không?
Không. File được tính mã hash bằng chính bộ mã hóa có sẵn dùng cho HTTPS. Không lưu trữ gì cả, nên không có mức trần dung lượng và không phải chờ kết nối.
Có giới hạn dung lượng không?
Giới hạn là bộ nhớ khả dụng, không phải mức trần cố định. Bộ mã hóa của trình duyệt không có cách nào tính mã hash của file theo từng phần — nó cần toàn bộ file trong bộ nhớ cùng lúc — nên một file rất lớn (chẳng hạn ảnh đĩa DVD) có thể lỗi trên máy không đủ bộ nhớ để chứa nó. File đến vài trăm megabyte không thành vấn đề trên một máy tính bình thường. Nếu một file lớn bị lỗi, đó chính là giới hạn bạn đã chạm tới, và trang sẽ nói rõ thay vì bị treo.
Tôi nên dùng mã hash nào?
SHA-256 cho mọi thứ mới. Đó là lựa chọn mặc định hiện đại, được dùng cho checksum phần mềm, digest của container và các hệ thống blockchain, và chưa có điểm yếu nào được biết đến. Chỉ dùng MD5 hoặc SHA-1 khi có thứ khác yêu cầu — đối chiếu với một checksum cũ đã công bố, một hệ thống cũ, hoặc Git, vốn định danh đối tượng bằng SHA-1. Dùng SHA-512 khi bạn cần một digest dài hơn; trên máy 64-bit nó thường nhanh hơn SHA-256 chứ không chậm hơn.
Tôi có thể dùng công cụ này để hash mật khẩu không?
Bạn có thể, nhưng đừng lưu kết quả. Đây là sai lầm phổ biến nhất trong lĩnh vực này, nên cần nói thẳng: MD5, SHA-1 và SHA-256 đều sai với mật khẩu, và việc SHA-256 mạnh về mặt mật mã cũng không giúp gì. Vấn đề là các hàm này NHANH theo thiết kế — một card đồ họa hiện đại tính được hàng tỷ mã SHA-256 mỗi giây, nên một cơ sở dữ liệu mật khẩu hash bằng SHA-256 bị đánh cắp sẽ bị bẻ khóa với tốc độ khủng khiếp. Mật khẩu cần một hàm cố ý chạy chậm, có salt, được xây dựng riêng cho việc này: bcrypt, scrypt hoặc Argon2. Mọi framework nghiêm túc đều có sẵn một hàm như vậy.
Vì sao MD5 bị đánh dấu là đã bị phá?
Vì giờ đây ai cũng có thể tạo ra hai file khác nhau có cùng mã hash MD5, trên phần cứng thông thường, chỉ trong vài giây. Điều đó đã đúng từ năm 2004 và đã được chứng minh với hậu quả thực tế — hai file PDF hiển thị hai hợp đồng khác nhau, hai file thực thi mà một trong số đó là mã độc. Vì vậy MD5 không thể chứng minh một file đúng là file bạn mong đợi; một bản giả mạo có chủ đích vẫn có thể khớp. Nó vẫn hoàn toàn hợp lý để phát hiện hư hỏng ngẫu nhiên, như tải về bị lỗi hay bản sao bị cắt cụt, và đó là mục đích thực sự của phần lớn các checksum MD5 được công bố. Nó tuyệt đối không được dùng cho mục đích bảo mật.
Vì sao SHA-1 bị đánh dấu là đã bị phá?
Vì cùng một lý do, chỉ là gần đây hơn. Năm 2017, Google và CWI đã tạo ra hai file PDF khác nhau có cùng mã hash SHA-1, và đến năm 2020 cuộc tấn công đã đủ rẻ để giả mạo chữ ký. Các trình duyệt đã ngừng chấp nhận chứng chỉ SHA-1 từ nhiều năm trước, và Git đang chuyển dần khỏi nó. Nếu bạn chọn thuật toán hôm nay, hãy chọn SHA-256.
Làm sao để kiểm tra file tải về?
Thả file đã tải về vào, rồi dán checksum từ trang bạn tải file vào ô so sánh. Nếu khớp, file đã đến nơi nguyên vẹn và đúng là file đã được công bố. Nếu không khớp, hãy xóa nó và tải lại. Hai lưu ý: hãy lấy checksum từ nguồn chính thức thay vì từ nơi bạn lấy file, và nhớ rằng checksum chỉ chứng minh file khớp với thứ trang đó đã công bố — nếu chính trang đó bị xâm nhập, cả hai sẽ đều khớp.
Các mã hash có được tính chính xác không?
SHA-1, SHA-256, SHA-384 và SHA-512 đến từ chính bộ Web Crypto có sẵn của trình duyệt, cùng đoạn code xử lý HTTPS. MD5 không có trong Web Crypto — một cách cố ý, vì nó đã bị phá — nên nó được triển khai trực tiếp ở đây theo RFC 1321 và được kiểm tra với các bộ vector thử nghiệm do chính tài liệu đó công bố.
Nên biết: MD5 và SHA-1 có mặt ở đây vì file thực tế và hệ thống cũ vẫn dùng chúng, không phải vì chúng an toàn — cả hai đều đã bị phá với mọi mục đích liên quan đến bảo mật và chỉ còn hữu ích làm checksum. Web Crypto không có cách tính digest tăng dần, nên toàn bộ file được giữ trong bộ nhớ: file rất lớn sẽ lỗi chứ không được xử lý theo luồng.
Đặt công cụ này lên website của bạn
Miễn phí cho mọi blog, trang lớp học hay bài viết hướng dẫn. Chỉ cần dán một đoạn mã là khách truy cập có thể dùng ngay trên trang của bạn.