Văn bản sang hex

Đọc một bản kết xuất bộ nhớ, kiểm tra xem một giao thức thực sự đã đẩy gì lên đường truyền, gỡ một câu đố CTF: sớm muộn gì bạn cũng cần tới các byte nằm sau một chuỗi. Dán văn bản vào và công cụ này trả lại từng byte một dưới dạng hex, hoặc có dấu cách như một bản hexdump (48 65 6c 6c 6f), hoặc liền một mạch (48656c6c6f). Đổi chế độ thì chiều ngược lại: hex bạn dán vào sẽ trở về thành văn bản đọc được.

Công cụ hoạt động ra sao

  1. 1

    Chọn chiều chuyển đổi

    Văn bản sang hex mã hóa những gì bạn gõ. Hex sang văn bản đưa nó trở lại thành ký tự.

  2. 2

    Chọn dấu phân cách

    Khi mã hóa, một dấu cách giữa các byte hoặc không có gì cả. Chỉ có hai lựa chọn này.

  3. 3

    Dán dữ liệu vào

    Văn bản được đọc theo UTF-8. Hex có thể kèm tiền tố 0x hoặc \x, dấu phẩy, dấu cách hay ký tự xuống dòng: chúng được gỡ bỏ giúp bạn.

  4. 4

    Chuyển đổi và sao chép

    Kết quả hiện ngay bên dưới cùng nút sao chép. Không có tệp nào được tải về.

Vì sao dùng hex chứ không dùng hệ thập phân

Một chữ số hex phủ đúng 4 bit, nên hai chữ số phủ đúng một byte, lần nào cũng vậy. Hệ thập phân buộc bạn phải tính nhẩm để biết một giá trị còn vừa hay không (128 có nằm trong khoảng không? còn 256 thì sao?), trong khi hex bày ra ngay: 00 là byte nhỏ nhất, ff là lớn nhất, và mọi byte ở giữa đều rộng đúng hai ký tự. Chính sự thẳng hàng đó khiến hex trở thành cách ghi của các bản kết xuất bộ nhớ, các gói tin bắt được, chữ ký tệp và mã màu.

Công cụ này thực sự cho ra cái gì

  • Luôn viết thường. Bộ mã hóa viết 6c, không bao giờ viết 6C. Hex không phân biệt chữ hoa chữ thường nên không mất mát gì, nhưng nếu định dạng đích của bạn đòi chữ hoa, hãy đưa kết quả qua một công cụ đổi kiểu chữ.
  • Luôn hai chữ số cho mỗi byte. Ký tự tab là 09 chứ không phải 9, để ranh giới giữa các byte vẫn đếm được.
  • Dấu cách hoặc không gì cả. Chỉ có hai dấu phân cách đó. Ở chiều mã hóa không có tiền tố 0x hay \x, nên hãy tự thêm trong trình soạn thảo nếu bạn cần chuỗi thoát của C hay Python.
  • UTF-8 từ đầu đến cuối. Văn bản được đo bằng byte, không phải bằng ký tự.

Hex và Unicode

H chiếm một byte trong UTF-8 nên thành 48. Mọi thứ ngoài ASCII thuần đều chiếm nhiều hơn:

Ký tự Hex UTF-8 Byte
A 41 1
é c3 a9 2
€ e2 82 ac 3
🚀 f0 9f 9a 80 4

Vì thế Hello mã hóa thành 48 65 6c 6c 6f, năm ký tự và năm byte, còn café mã hóa thành 63 61 66 c3 a9: bốn ký tự nhưng năm byte, vì é cần tới hai. Tiếng Việt còn tốn hơn nữa: chữ ế chiếm tới ba byte (e1 ba bf), nên một câu tiếng Việt có dấu thường dài gấp đôi số byte so với số chữ cái. Nếu một chuỗi ngắn cho ra nhiều cặp hex hơn bạn tưởng, đó thường là lý do.

Bộ giải mã chấp nhận những gì

Dán bất kỳ dạng nào dưới đây, bạn đều nhận lại Hello:

  • 48 65 6c 6c 6f, kiểu hexdump
  • 48656c6c6f, thô và không có dấu phân cách
  • 0x48656c6c6f, kiểu hằng số nguyên
  • \x48\x65\x6c\x6c\x6f, chuỗi thoát của C và Python
  • 48,65,6C,6C,6F, ngăn bằng dấu phẩy và trộn lẫn chữ hoa chữ thường tùy ý

Tiền tố, dấu phẩy, dấu cách, tab và ký tự xuống dòng đều được gỡ bỏ trước khi giải mã. Những thứ khác thì không: một dấu gạch nối trong 48-65, một dấu # đứng trước mã màu, hay một chữ cái vượt quá f sẽ làm việc giải mã dừng lại, và số chữ số lẻ cũng vậy, vì nửa byte không thể thành một ký tự. Trong những trường hợp đó công cụ thà không trả về gì còn hơn đoán bừa một kết quả dở dang. Nếu ô kết quả cứ trống, đó chính là chỗ cần soi lại.

Mã màu hex dùng cùng cách ghi nhưng không cùng nội dung

#ff8800 dùng đúng hệ cơ số 16 ấy, nhưng ba byte đó mô tả các kênh đỏ, lục và lam chứ không phải ký tự. Bỏ dấu # rồi giải mã ở đây, bạn sẽ nhận được ba byte thô không tạo thành văn bản đọc được. Với việc đó, hãy dùng một công cụ chọn màu.

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

Đúng vậy. Hệ thập lục phân và base16 là hai tên gọi của cùng một hệ: mười sáu chữ số (từ 0 đến 9 và từ a đến f), mỗi chữ số mang 4 bit.

Không lấy được từ công cụ này. Bộ mã hóa luôn viết thường. Vì hex không phân biệt chữ hoa chữ thường nên 4f và 4F là cùng một byte; hãy đưa kết quả qua bất kỳ công cụ đổi kiểu chữ nào nếu định dạng của bạn yêu cầu. Bộ giải mã thì đọc được cả hai dạng.

Bộ giải mã chỉ nhận các chữ số từ 0 đến 9 và từ a đến f với số lượng chẵn, sau khi đã gỡ tiền tố 0x và \x, dấu phẩy và khoảng trắng. Một dấu gạch nối, một dấu #, một chữ cái vượt quá f hay thiếu một chữ số đều làm dữ liệu vào không hợp lệ, và công cụ thà cho kết quả trống còn hơn cho kết quả sai. Hãy đếm lại số chữ số và tìm những dấu câu lọt vào.

Phần lớn biểu tượng cảm xúc nằm ở các mặt phẳng bổ sung của Unicode, được UTF-8 lưu bằng bốn byte. Ký tự ASCII thuần vẫn giữ một byte mỗi ký tự, đó là lý do văn bản tiếng Anh cho ra một cặp mỗi ký tự còn tiếng Việt có dấu thì không.

Không. Đây là một ô nhập văn bản nên nó xử lý những gì bạn gõ hoặc dán được. Với dữ liệu nhị phân, base64 vừa gọn hơn vừa dễ truyền đi hơn.

Có. Việc chuyển đổi chạy trên máy chủ của chúng tôi, nên nội dung bạn dán vào sẽ đi kèm yêu cầu và kết quả được gửi trả về. Chúng tôi chỉ ghi lại thao tác và các tùy chọn bạn đã chọn, không bao giờ ghi nội dung văn bản, và văn bản không được lưu lại sau khi phản hồi được trả về. Với tài liệu thực sự nhạy cảm, hãy dùng công cụ chạy ngoại tuyến trên máy của chính bạn.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác