Cách tạo hash MD5, SHA-256 và các loại khác
Hashing chuyển đổi bất kỳ đầu vào nào — một mật khẩu, một tệp, một thông điệp — thành một chuỗi có độ dài cố định. Cùng một đầu vào luôn tạo ra cùng một hash, nhưng thay đổi nhỏ nhất trong đầu vào tạo ra một hash hoàn toàn khác. Điều này làm cho hashing thiết yếu để xác minh tính toàn vẹn, lưu trữ mật khẩu và chữ ký số.
Cách hashing hoạt động
Một hàm hash lấy một đầu vào ở bất kỳ kích thước nào và tạo ra một đầu ra có kích thước cố định:
| Đầu vào | Hash SHA-256 (16 ký tự đầu tiên) |
|---|---|
| hello | 2cf24dba5fb0a30e... |
| Hello | 185f8db32271fe25... |
| hello! | ce06092fb948d9ff... |
Lưu ý rằng một ký tự được thay đổi (h thường thành H hoa) hoặc được thêm vào thay đổi hash hoàn toàn. Đây được gọi là hiệu ứng thác.
Các thuật toán hash phổ biến
| Thuật toán | Độ dài | Trạng thái | Sử dụng cho |
|---|---|---|---|
| MD5 | 32 ký tự | Đã bị phá (không an toàn) | Checksum kế thừa, sử dụng không bảo mật |
| SHA-1 | 40 ký tự | Đã bị phá (không an toàn) | Chỉ hệ thống kế thừa |
| SHA-256 | 64 ký tự | An toàn | Tính toàn vẹn tệp, chữ ký số |
| SHA-512 | 128 ký tự | An toàn | Ứng dụng bảo mật cao |
SHA-256 là tiêu chuẩn hiện tại cho hầu hết các sử dụng. MD5 và SHA-1 chỉ nên được sử dụng để tương tác với các hệ thống kế thừa yêu cầu chúng.
Cách tạo một hash
- Chọn thuật toán của bạn — chọn MD5, SHA-1, SHA-256, SHA-384 hoặc SHA-512. Sử dụng SHA-256 trừ khi có lý do cụ thể.
- Nhập văn bản hoặc tải lên một tệp — gõ hoặc dán văn bản, hoặc chọn một tệp để hash.
- Sao chép hash — kết quả là một chuỗi thập lục phân có thể sử dụng để xác minh, lưu trữ hoặc so sánh.
Sử dụng thực tế
Xác minh tính toàn vẹn của tệp — tải xuống một tệp và so sánh hash của nó với hash được công bố chính thức. Nếu chúng khớp, tệp là chính hãng và không bị hỏng.
Lưu trữ mật khẩu — các ứng dụng lưu trữ hash mật khẩu, không phải mật khẩu thực. Khi bạn đăng nhập, đầu vào của bạn được hash và so sánh với hash đã lưu trữ.
Loại bỏ trùng lặp dữ liệu — hash các tệp lớn để nhanh chóng xác định xem chúng có giống nhau không mà không cần so sánh từng byte.
HMAC cho bảo mật API — sử dụng HMAC (hash với khóa bí mật) để ký các yêu cầu API và đảm bảo chúng không bị thay đổi trong quá trình truyền.
Mẹo
- Sử dụng SHA-256 theo mặc định — nó an toàn, được hỗ trợ rộng rãi và là khuyến nghị tiêu chuẩn cho các dự án mới.
- Không bao giờ sử dụng MD5 cho bảo mật — các xung đột MD5 (đầu vào khác nhau tạo ra cùng một hash) có thể được tạo ra trong vài giây. Nó phù hợp cho các checksum không bảo mật nhưng không cho những gì quan trọng về tính toàn vẹn.
- Salt các hash mật khẩu của bạn — thêm một salt ngẫu nhiên vào mỗi mật khẩu trước khi hash ngăn chặn các cuộc tấn công bằng bảng cầu vồng. Sử dụng bcrypt hoặc Argon2 để hash mật khẩu trong sản xuất.
- Hashing tệp hoạt động cục bộ — tệp được xử lý trong trình duyệt của bạn, vì vậy ngay cả các tệp lớn cũng không bao giờ rời khỏi thiết bị của bạn.
Câu hỏi thường gặp
Sự khác biệt giữa MD5, SHA-1 và SHA-256 là gì?
MD5 tạo ra một hash 128 bit (32 ký tự hex), SHA-1 tạo ra 160 bit (40 ký tự) và SHA-256 tạo ra 256 bit (64 ký tự). MD5 và SHA-1 được coi là đã bị phá về mặt mật mã. SHA-256 hiện tại an toàn và được khuyến nghị cho việc xác minh tính toàn vẹn và bảo mật.
Có thể đảo ngược một hash để tìm lại dữ liệu gốc không?
Không. Các hàm hash là một chiều theo thiết kế. Bạn không thể đảo ngược toán học một hash về đầu vào của nó. Tuy nhiên, các mật khẩu phổ biến có thể được tìm thấy trong các bảng được tính trước (rainbow tables), do đó tầm quan trọng của việc salt mật khẩu trước khi hash.
HMAC là gì?
HMAC (Hash-based Message Authentication Code) kết hợp một hàm hash với một khóa bí mật. Nó xác minh cả tính toàn vẹn và tính xác thực của dữ liệu — chứng minh rằng chúng không bị thay đổi và được sản xuất bởi ai đó biết khóa bí mật.
Dữ liệu của tôi có được gửi đến máy chủ không?
Không. Tất cả việc hashing chạy trong trình duyệt của bạn với API Web Crypto. Văn bản và tệp của bạn không bao giờ rời khỏi thiết bị của bạn.