Mã hóa

Punycode encode/decode

Mã hóa tên miền chứa ký tự Unicode (IDN) sang định dạng Punycode tương thích ASCII (xn--) và ngược lại.

The DNS system historically only supports ASCII characters, so domain names with Cyrillic, CJK, or other non-ASCII characters (IDN) are encoded as Punycode — an ASCII-compatible form prefixed with xn--. This tool encodes and decodes such domains.

How to use it

Common uses

Things to keep in mind

Visually similar characters from different scripts (like Cyrillic "а" and Latin "a") can form a domain that looks identical to a known brand — this is the basis of homograph phishing.

Not every browser shows decoded Unicode the same way: when a domain label mixes scripts, browsers often deliberately show the raw xn-- form as a warning sign.

Bài viết về công cụ này: Punycode: tên miền quốc tế hóa hoạt động thế nào trong DNS

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

Punycode được dùng để làm gì?

Punycode mã hóa tên miền quốc tế hóa chứa ký tự ngoài ASCII (như münchen.de) thành dạng tương thích ASCII với tiền tố xn--, vì hệ thống DNS chỉ hỗ trợ nhãn ASCII.

Vì sao tôi nên cẩn thận với tên miền Punycode?

Punycode tạo điều kiện cho tấn công homograph, trong đó các ký tự giống nhau từ bảng chữ cái khác được dùng để đăng ký tên miền trông giống hệt một tên miền đáng tin cậy. Nếu một tên miền có tiền tố xn--, hãy giải mã tại đây để biết nó thực sự là gì.

Công cụ này chỉ hoạt động với tên miền đầy đủ thôi sao?

Bạn có thể mã hóa hoặc giải mã một nhãn đơn hoặc cả tên miền có dấu chấm — mỗi nhãn giữa các dấu chấm được chuyển đổi độc lập, và tiền tố xn-- chỉ được thêm vào nhãn thực sự chứa ký tự ngoài ASCII.

Làm sao nhận biết một liên kết đang dùng Punycode?

Tên miền đã mã hóa luôn có tiền tố xn-- trước mỗi nhãn chứa ký tự ngoài ASCII. Nếu thấy một tên miền bắt đầu bằng xn-- trên thanh địa chỉ hay trong email, đó là dấu hiệu của IDN — nên kiểm tra xem văn bản thực sự ẩn sau mã hóa đó là gì.

Mọi trình duyệt có hiển thị chữ Kirin trên thanh địa chỉ giống nhau không?

Không. Một số trình duyệt chỉ hiển thị Unicode đã giải mã nếu toàn bộ ký tự của tên miền thuộc cùng một bảng chữ cái, còn khi trộn lẫn bảng chữ cái (dấu hiệu của tấn công homograph), chúng cố tình hiển thị chuỗi xn-- thô thay vì ký tự gốc.

Bài viết: Mã hóa

Base64: mã hóa để làm gì và hoạt động ra sao

Base64 biến dữ liệu nhị phân thành văn bản ASCII như thế nào và khi nào thực sự cần đến nó.

Base32: khác gì với Base64 và khi nào tiện hơn

Bảng chữ cái Base32 không phân biệt hoa thường và các trường hợp nó tiện hơn Base64.

URL Encode/Decode: percent-encoding trong liên kết

Các ký tự đặc biệt trong địa chỉ và tham số trở thành chuỗi %XX như thế nào.

HTML Entities: cách hiển thị ký tự đặc biệt an toàn

Vì sao các ký tự < > & cần được escape và điều đó giúp tránh hỏng mã HTML thế nào.

JWT: cấu trúc token và "giải mã" JWT nghĩa là gì

Header, payload và signature của JWT, và vì sao giải mã không giống với xác minh chữ ký.

Unicode Escape: chuỗi \uXXXX nghĩa là gì

Chuỗi kiểu \u0041 trong JSON và chuỗi JS đến từ đâu và chúng nghĩa là gì.

ROT13 và mật mã Caesar: thay thế ký tự đơn giản

Vì sao dịch 13 chữ cái khiến ROT13 tự nghịch đảo, và vì sao ngày nay người ta vẫn dùng nó.

Mã Morse: văn bản biến thành chấm và gạch ra sao

Nguyên lý mã hóa chữ cái thành chấm và gạch, và mã Morse còn được dùng ở đâu hiện nay.

Data URI: khi nào nên nhúng hình ảnh trực tiếp vào mã

Một Data URI nhúng nội dung tệp trực tiếp vào HTML hoặc CSS ra sao, và khi nào đáng làm vậy.

Gzip + Base64: nén dữ liệu để truyền dưới dạng văn bản

Vì sao dữ liệu nhị phân đã nén còn được mã hóa Base64 trước khi đưa vào trường văn bản.

XML Entities: escape ký tự trong tài liệu XML

Năm entity XML bắt buộc, thiếu chúng tài liệu sẽ hỏng khi phân tích cú pháp.