Bỏ qua điều hướng, tới nội dung chính
Tiện Ích Số

Tạo UUID v4 và mã băm MD5, SHA

Tạo UUID v4 ngẫu nhiên và mã băm MD5, SHA-1, SHA-256, SHA-384, SHA-512 từ văn bản ngay trên trình duyệt. Miễn phí, có nút sao chép từng kết quả.

Nội dung: Ban biên tập Tiện Ích SốCập nhật:

Tạo UUID v4 ngẫu nhiên

UUID được sinh bằng bộ sinh ngẫu nhiên an toàn của trình duyệt, không gửi đi đâu cả.

Từ 1 đến 50 mã mỗi lần tạo.

Danh sách UUID

Chưa có UUID. Chọn số lượng rồi nhấn Tạo UUID.

Tạo mã băm (hash) từ văn bản

Nhập nội dung bất kỳ, kết quả MD5 và SHA hiện ngay khi bạn gõ.

Nội dung được mã hóa UTF-8 trước khi băm, nên tiếng Việt có dấu và emoji cho kết quả chuẩn.

Kết quả mã băm

Chưa có kết quả. Hãy nhập văn bản ở ô phía trên.

Lưu ý bảo mật: MD5 và SHA-1 đã bị chứng minh có thể tạo va chạm, chỉ nên dùng để đối chiếu checksum của tệp hoặc tương thích hệ thống cũ. Với mật khẩu, hãy dùng bcrypt, scrypt hoặc Argon2 kèm salt — không băm suông bằng MD5/SHA.

UUID là gì và dùng để làm gì?

UUID (Universally Unique Identifier), còn gọi là GUID trong hệ sinh thái Microsoft, là một chuỗi định danh dài 128 bit thường được viết dưới dạng 32 ký tự thập lục phân chia thành 5 nhóm, ví dụ 3f2504e0-4f89-41d3-9a0c-0305e82c3301. Điểm mạnh của UUID là bạn có thể tạo ra nó ở bất kỳ máy nào, bất kỳ lúc nào, mà gần như không bao giờ trùng với mã do máy khác tạo ra — không cần một máy chủ trung tâm cấp phát số thứ tự.

Bản v4 mà công cụ này tạo ra được sinh hoàn toàn ngẫu nhiên. Trong 128 bit thì có 6 bit dành để đánh dấu phiên bản và biến thể, còn lại 122 bit là ngẫu nhiên, tương đương hơn 5 tỷ tỷ tỷ tỷ khả năng. Xác suất trùng lặp nhỏ tới mức trong thực tế lập trình viên coi như bằng không. Công cụ dùng crypto.randomUUID hoặc crypto.getRandomValues của trình duyệt, tức là nguồn ngẫu nhiên đạt chuẩn mật mã, chứ không dùng Math.random vốn có thể đoán trước được.

UUID xuất hiện ở khắp nơi trong công việc hằng ngày của lập trình viên: khóa chính của bảng dữ liệu khi hệ thống có nhiều máy chủ ghi song song, mã đơn hàng, mã phiên đăng nhập, khóa idempotency khi gọi API thanh toán, tên file tải lên để tránh ghi đè, hay mã định danh thiết bị. Bạn có thể chọn xuất chữ in hoa, bỏ dấu gạch ngang hoặc bọc trong cặp ngoặc nhọn để khớp với định dạng mà cơ sở dữ liệu hay ngôn ngữ của bạn đang dùng.

Mã băm (hash) khác gì mã hóa?

Hàm băm nhận vào một dữ liệu bất kỳ và trả về một chuỗi có độ dài cố định gọi là mã băm. Quá trình này một chiều: từ văn bản tính ra mã băm rất nhanh, nhưng từ mã băm không thể tính ngược lại nội dung gốc. Đó là điểm khác biệt căn bản với mã hóa — mã hóa có khóa để giải ngược, còn băm thì không. Chỉ cần đổi một ký tự trong nội dung đầu vào, toàn bộ mã băm sẽ thay đổi hoàn toàn, nên hash rất hợp để kiểm tra xem dữ liệu có bị sửa đổi hay không.

Ứng dụng phổ biến gồm: kiểm tra tính toàn vẹn của file tải về bằng cách so checksum với con số nhà phát hành công bố, so sánh nhanh hai đoạn dữ liệu lớn, tạo khóa cho bộ nhớ đệm, ký số, xác thực webhook bằng HMAC, và định danh nội dung trong Git.

So sánh MD5, SHA-1, SHA-256, SHA-384 và SHA-512

  • MD5: cho ra 128 bit (32 ký tự hex), rất nhanh nhưng đã bị phá vỡ khả năng chống va chạm từ năm 2004. Ngày nay chỉ nên dùng để đối chiếu checksum vô tình hỏng file, tuyệt đối không dùng cho mật khẩu hay chữ ký số.
  • SHA-1: 160 bit (40 ký tự hex). Google công bố va chạm thực tế năm 2017, các trình duyệt đã ngừng chấp nhận chứng chỉ SSL dùng SHA-1. Chỉ giữ lại để tương thích hệ thống cũ.
  • SHA-256: 256 bit (64 ký tự hex), thuộc họ SHA-2, hiện là lựa chọn mặc định an toàn cho hầu hết nhu cầu: chữ ký số, blockchain, xác thực API.
  • SHA-384 và SHA-512: cho ra mã dài hơn, biên an toàn cao hơn. Trên vi xử lý 64 bit, SHA-512 thường chạy nhanh hơn SHA-256 vì xử lý theo khối 64 bit.

Vì trình duyệt không cung cấp sẵn MD5 trong Web Crypto API, công cụ tự tính MD5 bằng JavaScript ngay trên máy bạn theo đúng chuẩn RFC 1321, còn nhóm SHA dùng crypto.subtle.digest có sẵn của trình duyệt.

Lưu ý bảo mật quan trọng

Không bao giờ lưu mật khẩu người dùng bằng MD5 hay SHA suông. Các hàm này được thiết kế để chạy thật nhanh, nên kẻ tấn công cũng dò được hàng tỷ mật khẩu mỗi giây bằng card đồ họa, chưa kể các bảng tra cứu (rainbow table) đã có sẵn cho mật khẩu phổ biến. Với mật khẩu, hãy dùng bcrypt, scrypt hoặc Argon2 kèm salt ngẫu nhiên cho từng người dùng.

Toàn bộ dữ liệu bạn nhập ở trang này được xử lý ngay trong trình duyệt bằng JavaScript và không được gửi lên bất kỳ máy chủ nào. Dù vậy, vẫn không nên dán mật khẩu thật, khóa API hay dữ liệu nhạy cảm vào bất cứ công cụ trực tuyến nào — kể cả công cụ chạy hoàn toàn phía người dùng — để giữ thói quen an toàn.

Chọn đúng công cụ cho đúng việc

Băm một chuỗi văn bản thì dùng trang này; băm cả một tệp để kiểm tra tệp tải về có nguyên vẹn hay không thì dùng công cụ tính mã băm file, vì nó đọc trực tiếp nội dung nhị phân thay vì bắt bạn dán chữ.

Nếu thứ bạn cần là một chuỗi bí mật để đăng nhập chứ không phải mã định danh, hãy sang công cụ tạo mật khẩu — UUID tuy trông ngẫu nhiên nhưng không được thiết kế để làm mật khẩu và không nên dùng vào việc đó.

Và nhắc lại điều dễ nhầm nhất: Base64 không phải hàm băm. Nó đảo ngược được hoàn toàn, trong khi mã băm là một chiều. Dùng nhầm hai thứ này là lỗi bảo mật nghiêm trọng. Khi cần chèn UUID vào dữ liệu thử nghiệm, công cụ format JSON giúp kiểm tra cú pháp trước khi dùng.

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

UUID v4 do công cụ này tạo ra có bị trùng không?

Gần như không thể. UUID v4 có 122 bit ngẫu nhiên, tương đương hơn 5.3 x 10^36 khả năng, và được sinh bằng bộ ngẫu nhiên đạt chuẩn mật mã của trình duyệt. Với khối lượng dữ liệu thực tế, xác suất trùng nhỏ tới mức có thể bỏ qua.

Vì sao không có nút giải mã ngược từ mã băm về văn bản gốc?

Vì hàm băm là một chiều theo thiết kế: từ nội dung tính ra mã băm thì nhanh, nhưng không có phép toán nào đi ngược lại. Các trang quảng cáo "giải mã MD5" thực chất chỉ tra trong kho dữ liệu đã băm sẵn, chứ không tính ngược được.

Nên chọn thuật toán nào cho dự án mới?

Hãy dùng SHA-256 cho nhu cầu thông thường như checksum, chữ ký số hay xác thực webhook. Nếu cần biên an toàn cao hơn thì chọn SHA-512. Tránh MD5 và SHA-1 vì cả hai đã bị phá vỡ khả năng chống va chạm.

Văn bản tôi nhập có được gửi lên máy chủ không?

Không. Cả phần tạo UUID lẫn phần tính mã băm đều chạy bằng JavaScript ngay trên trình duyệt của bạn, không có dữ liệu nào rời khỏi máy và không có gì được lưu lại sau khi bạn đóng trang.

Gợi ý theo quy trình thường dùng cùng lúc — không chỉ cùng nhóm Developer.

← Xem toàn bộ công cụ