Tạo mã băm cho văn bản và tệp

MD5, SHA-1/2/3, Keccak, CRC-32 và HMAC của văn bản hoặc tệp, dạng hex hay Base64.

Đầu vào

43 byte

Các giá trị băm

MD5 ⚠Không chống được va chạm: dùng làm checksum thì được, không dùng khi có người cố tình tạo dữ liệu giả.

9e107d9d372bb6826bd81d3542a419d6

SHA-1 ⚠Không chống được va chạm: dùng làm checksum thì được, không dùng khi có người cố tình tạo dữ liệu giả.

2fd4e1c67a2d28fced849ee1bb76e7391b93eb12

SHA-256

d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592

SHA-384

ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1

SHA-512

07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6

SHA3-256

69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04

SHA3-512

01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450

Keccak-256

4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15

CRC-32 ⚠Không chống được va chạm: dùng làm checksum thì được, không dùng khi có người cố tình tạo dữ liệu giả.

414fa339

⚠ Không chống được va chạm: dùng làm checksum thì được, không dùng khi có người cố tình tạo dữ liệu giả.

Dán một giá trị băm; với hex, chữ hoa và dấu cách được bỏ qua.

Công cụ này làm gì

Gõ hoặc dán văn bản, hoặc chọn tệp, và mọi giá trị băm được tính cùng lúc: MD5, SHA-1, SHA-256, SHA-384, SHA-512, SHA3-256, SHA3-512, Keccak-256 (kiểu đệm Keccak gốc mà Ethereum dùng) và CRC-32. Bật HMAC để tính băm có khóa, với khóa dạng văn bản hoặc hex. Kết quả hiển thị dạng thập lục phân (chữ thường hay hoa), Base64 hoặc Base64url, và ô so sánh cho biết thuật toán nào tạo ra giá trị băm bạn dán vào. Văn bản và tệp không rời khỏi trình duyệt; tệp được đọc từng phần nên tệp lớn vẫn dùng được.

Văn bản được băm dưới dạng byte UTF-8

Hàm băm tính trên byte chứ không phải ký tự. Công cụ mã hóa văn bản thành UTF-8 đúng như đã gõ, giống lệnh printf '%s' 'text' | sha256sum. Hai lý do hay khiến giá trị băm "không khớp":

  • Dấu xuống dòng ở cuối. echo 'text' | sha256sum băm cả văn bản lẫn ký tự xuống dòng. Hãy dùng printf '%s' hoặc echo -n.
  • Mã hóa khác. "é" là hai byte trong UTF-8 (C3 A9) nhưng một byte trong Latin-1 (E9). Số byte dưới ô nhập cho biết thứ đang được băm.

Ví dụ: chuỗi The quick brown fox jumps over the lazy dog (43 byte) có MD5 9e107d9d372bb6826bd81d3542a419d6 và CRC-32 414fa339; với HMAC và khóa key, HMAC-SHA256 là f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8.

Thuật toán nào cho việc gì

  • SHA-256 là lựa chọn mặc định hợp lý cho checksum và chữ ký. SHA-3 là thiết kế khác SHA-2 (FIPS 202); Keccak-256 khác SHA3-256 ở phần đệm và xuất hiện trong Ethereum.
  • MD5 và SHA-1 đã bị phá về va chạm: vẫn ổn để phát hiện hỏng dữ liệu vô tình, nhưng đừng dùng khi có người cố tình tạo dữ liệu.
  • CRC-32 là checksum, không phải hàm băm mật mã.
  • HMAC chứng minh tin nhắn đến từ người biết khóa, như chữ ký webhook.
  • Mật khẩu: không dùng hàm nào ở trên; hãy dùng Argon2id, scrypt hoặc bcrypt.

Bài viết nên dùng hàm băm nào: MD5, SHA-256 hay HMAC giải thích chi tiết. Để kiểm tra tệp tải về, dùng công cụ kiểm tra mã băm tệp.

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

Vì sao SHA-256 của tôi khác với dòng lệnh?

Thường vì echo thêm ký tự xuống dòng: echo 'abc' | sha256sum băm bốn byte chứ không phải ba. Hãy dùng printf '%s' 'abc' hoặc echo -n. Mã hóa khác nhau (UTF-8 với Latin-1, UTF-16) cũng cho byte khác và giá trị băm khác.

Có đảo ngược được giá trị băm không?

Không bằng tính toán. Nhưng dữ liệu ngắn hay phổ biến có thể bị đoán ra: MD5 hay SHA-256 của mật khẩu thông dụng tìm được trong vài giây. Vì thế mật khẩu cần hàm chậm, có salt như Argon2id hay bcrypt.

MD5 còn an toàn không?

Để phát hiện tệp bị hỏng vô tình thì được. Với thứ kẻ tấn công có thể tác động (chữ ký, chứng chỉ) thì không: va chạm tạo được trên máy tính xách tay. Hãy dùng SHA-256.

Khi nào nên dùng HMAC?

Khi giá trị băm phải chứng minh ai gửi tin nhắn: chữ ký webhook, ký yêu cầu API, cookie có chữ ký. Hai bên dùng chung một khóa bí mật, và chỉ người có khóa mới tạo được HMAC khớp.