Bỏ qua đến nội dung
LeedyBox
Ủng hộ

Tạo mã hash: MD5, SHA-1, SHA-256, SHA-512 & HMAC

Tính hash MD5, SHA-1, SHA-256, SHA-384, SHA-512 hoặc HMAC của văn bản hay tệp ngay trên trình duyệt và so sánh với checksum mong đợi.

Đầu vào

Văn bản được tính hash đúng như đã nhập, kể cả dấu cách và ký tự xuống dòng. Ký tự xuống dòng trong ô này được tính là LF.

Kết quả

Nhập văn bản hoặc chọn tệp để xem hash.

MD5
SHA-1
SHA-256
SHA-384
SHA-512

Giá trị hex được so sánh không phân biệt chữ hoa hay chữ thường; giá trị Base64 phải khớp chính xác.

Lưu ý

  • MD5 và SHA-1 có các kiểu tấn công va chạm đã biết và không nên dùng cho mục đích bảo mật. Chỉ dùng chúng cho các kiểm tra không liên quan đến bảo mật, chẳng hạn so sánh tệp tải về với checksum đã công bố.
  • Hash không phải là mã hóa. Công cụ này không thể chuyển hash ngược lại thành văn bản hoặc tệp ban đầu.
  • Không dùng hash thông thường để lưu mật khẩu. Hãy dùng một cơ chế băm mật khẩu chuyên dụng như Argon2, scrypt hoặc bcrypt.
  • Hash được tính từ các byte, nên cùng một văn bản nhưng khác ký tự xuống dòng (CRLF hoặc LF), khác bảng mã ký tự hoặc có thêm dấu cách sẽ cho hash khác.
  • HMAC kết hợp hàm băm với một khóa bí mật. Công cụ này không cung cấp HMAC-MD5.
  • Văn bản và tệp được xử lý trên trình duyệt của bạn và không được gửi tới LeedyBox. Tệp rất lớn có thể xử lý chậm vì toàn bộ tệp được đọc vào bộ nhớ.

Hãy kiểm tra kết quả trước khi dùng. Công cụ được cung cấp nguyên trạng, không kèm bảo đảm, và kết quả có thể chưa đầy đủ hoặc không chính xác. Điều khoản dịch vụ

MD5 và SHA-1 không phù hợp cho mục đích bảo mật. Hash không phải là mã hóa, và checksum khớp chỉ cho thấy dữ liệu giống với dữ liệu đã dùng để tạo checksum đó.

Cách sử dụng

  1. Trong "Đầu vào", chọn "Văn bản" để tính hash của văn bản bạn nhập hoặc dán, hoặc chọn "Tệp" để tính hash của một tệp trên thiết bị.
  2. Với tệp, hãy chọn tệp hoặc thả tệp vào khung, rồi nhấn "Tính hash". Nếu sau đó bạn thay đổi "Chế độ HMAC" hoặc khóa, hãy nhấn lại nút này.
  3. Chọn một "Định dạng đầu ra": hex chữ thường, hex chữ hoa hoặc Base64. Đổi định dạng chỉ thay đổi cách viết cùng một kết quả, nên không có gì được tính lại.
  4. Để tính HMAC thay vì hash thông thường, hãy đánh dấu "Chế độ HMAC" và nhập khóa bí mật vào ô hiện ra. Công cụ không cung cấp HMAC-MD5, nên hàng MD5 hiển thị "Không hỗ trợ với HMAC".
  5. Để kiểm tra một tệp đã tải xuống, hãy dán giá trị được công bố vào "Checksum mong đợi (không bắt buộc)". Giá trị này được so sánh với mọi kết quả đã tính, và hàng khớp sẽ được đánh dấu "Khớp".

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

Vì sao hash của tôi khác với kết quả của sha256sum hoặc công cụ khác?

Ô văn bản tính hash đúng các ký tự bạn nhập, nên chỉ một khác biệt nhỏ cũng làm thay đổi kết quả. Nguyên nhân thường gặp là dấu xuống dòng ở cuối: echo hello | sha256sum tính hash của "hello" kèm một ký tự xuống dòng, nên cho giá trị SHA-256 khác với chỉ "hello", còn printf hello | sha256sum không thêm ký tự này. Các ký tự trông giống nhau cũng có thể được lưu khác nhau, ví dụ é có thể là một điểm mã hoặc là e theo sau bởi một dấu kết hợp. Để tính hash đúng các byte của tệp, hãy dùng "Tệp" thay vì dán nội dung của nó, vì ô văn bản mã hóa văn bản theo UTF-8 và tính hash ký tự xuống dòng dưới dạng LF.

Checksum được công bố là đúng, vậy vì sao không khớp?

Chỉ dán giá trị hash. Dấu cách, tab và dấu xuống dòng được loại bỏ trước khi so sánh, nên nếu bạn dán cả một dòng từ tệp checksum, tên tệp sẽ trở thành một phần của giá trị, và tiền tố như sha256: cũng khiến kết quả không khớp. Mọi thuật toán đã tính đều được đối chiếu, nên bạn không cần chọn thuật toán. Nếu chỉ dán giá trị mà vẫn không khớp, hãy kiểm tra xem "Chế độ HMAC" đã tắt chưa và checksum có dùng MD5, SHA-1, SHA-256, SHA-384 hoặc SHA-512 không; các thuật toán khác, như SHA-3 hoặc BLAKE2, không được tính ở đây. Nếu cả hai đều đúng, nhiều khả năng tệp khác với tệp dùng để tạo checksum, ví dụ là phiên bản khác hoặc tải xuống chưa hoàn tất.

Kết quả bắt đầu bằng e3b0c442 hoặc d41d8cd9 có nghĩa là gì?

Đó là hash của đầu vào rỗng (0 byte) viết ở dạng hex: giá trị SHA-256 bắt đầu bằng e3b0c442 và kết thúc bằng b855, còn giá trị MD5 là d41d8cd98f00b204e9800998ecf8427e. Khi "Chế độ HMAC" tắt, bạn sẽ thấy chúng sau khi xóa trống ô văn bản hoặc với tệp có kích thước 0 byte. Nếu chương trình của bạn tạo ra một trong các giá trị này cho dữ liệu lẽ ra không rỗng, nhiều khả năng nó đã tính hash của một chuỗi rỗng hoặc một tệp rỗng.

Tôi có thể kiểm tra chữ ký webhook hoặc API bằng chế độ HMAC không?

Thường là được, nếu chữ ký là HMAC dùng SHA-1, SHA-256, SHA-384 hoặc SHA-512; công cụ không cung cấp HMAC-MD5. Đánh dấu "Chế độ HMAC", nhập khóa bí mật dùng để ký, dùng phần thân yêu cầu làm đầu vào và dán chữ ký vào "Checksum mong đợi (không bắt buộc)" mà không kèm tiền tố như sha256=; cả chữ ký hex lẫn Base64 đều được nhận dạng. Đầu vào phải có đúng các byte đã được ký, nên phần thân JSON đã được định dạng lại sẽ không khớp, còn phần thân có dấu xuống dòng CRLF cần được lưu thành tệp và tính hash bằng "Tệp". Nhiều dịch vụ ký nhiều hơn phần thân, chẳng hạn một dấu thời gian và một ký tự phân cách đặt trước phần thân, vì vậy hãy xem tài liệu của dịch vụ để biết chính xác nội dung nào được ký.

Khóa bí mật của tôi ở dạng hex hoặc Base64. Tôi có dùng được không?

Chỉ khi dịch vụ dùng nguyên văn chuỗi khóa. Ô "Khóa bí mật (UTF-8)" dùng các byte UTF-8 của những ký tự bạn nhập và không giải mã hex hay Base64, nên nếu dịch vụ giải mã khóa trước khi ký thì HMAC tính ở đây sẽ không khớp. Dấu cách ở đầu hoặc cuối ô cũng được tính là một phần của khóa.

Làm sao để tạo hash Subresource Integrity (SRI)?

Chọn "Tệp", chọn tệp script hoặc stylesheet, kiểm tra để chắc rằng "Chế độ HMAC" đang tắt, nhấn "Tính hash" và đặt "Định dạng đầu ra" thành "Base64". Thêm sha384- vào trước giá trị SHA-384 để có giá trị cho thuộc tính integrity; sha256- và sha512- cũng dùng theo cách tương tự. Tệp phải giống từng byte với tệp mà trình duyệt tải xuống, nếu không trình duyệt sẽ từ chối sử dụng tệp đó. Tệp được tải từ một origin khác còn cần thuộc tính crossorigin, và máy chủ của tệp đó phải cho phép CORS.

Đầu ra hex và Base64 khác nhau thế nào?

Cả hai biểu diễn cùng một giá trị băm. Hex dùng hai ký tự cho mỗi byte, tức 64 ký tự với SHA-256, và là dạng mà các công cụ như sha256sum in ra; Base64 ngắn hơn, 44 ký tự với SHA-256. Đầu ra Base64 dùng bảng chữ cái chuẩn với + và / cùng phần đệm =, không phải biến thể an toàn cho URL dùng - và _, nên giá trị ở biến thể an toàn cho URL, hoặc giá trị đã bỏ phần đệm =, có thể không khớp khi so sánh.