วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความหรือไบต์เป็น Z85 หรือเลือก “ถอดรหัส” เพื่อแปลง Z85 กลับเป็นข้อมูล
- สำหรับคีย์และค่าไบนารีอื่น ๆ ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก” เมื่อเข้ารหัส หรือตั้ง “รูปแบบเอาต์พุต” เป็น “เลขฐานสิบหก” เมื่อถอดรหัส
- พิมพ์ วาง หรือคลิก “เปิดไฟล์” ผลลัพธ์จะอัปเดตทันทีขณะที่คุณพิมพ์
- กด “คัดลอก” เพื่อคัดลอกผลลัพธ์ หรือ “ดาวน์โหลด” เพื่อบันทึกเป็นไฟล์
Z85 คืออะไร
Z85 กำหนดไว้ใน ZeroMQ RFC 32 (ข้อกำหนดของชุมชน ZeroMQ ไม่ใช่ RFC ของ IETF) Z85 แปลงข้อมูลทุก 4 ไบต์เป็น 5 อักขระเช่นเดียวกับการเข้ารหัส Base85 แบบอื่น โดยอ่านแต่ละกลุ่มเป็นตัวเลข 32 บิตแบบ big-endian แล้วเขียนเป็นเลขฐาน 85 ห้าหลัก เริ่มจากหลักที่มีนัยสำคัญสูงสุด เอาต์พุตใหญ่กว่าอินพุต 25%
สิ่งที่ทำให้ Z85 แตกต่างคือชุดตัวอักษร ได้แก่ 0-9, a-z, A-Z และสัญลักษณ์ 23 ตัว .-:+=^!/*?&<>()[]{}@%$# โดยไม่มีเครื่องหมายอัญประกาศทั้งสองแบบ แบ็กสแลช แบ็กทิก จุลภาค อัฒภาค เส้นตั้ง ทิลดา และขีดล่าง ชุดตัวอักษรนี้ออกแบบมาให้ใช้ในสตริงของซอร์สโค้ดได้อย่างปลอดภัย จึงวางค่า Z85 ไว้ระหว่างเครื่องหมายอัญประกาศใน C, Python หรือ JSON ได้โดยไม่ต้อง escape เลย
Z85 ใช้ที่ไหนบ้าง
ZeroMQ ใช้ Z85 เพื่อแสดงคีย์ CurveZMQ เป็นข้อความ คีย์สาธารณะหรือคีย์ลับขนาด 32 ไบต์จะกลายเป็นสตริง Z85 ยาว 40 อักขระ ซึ่งเป็นรูปแบบที่ zmq_curve_keypair() ส่งคืน และเป็นรูปแบบที่ตัวเลือกซ็อกเก็ตสำหรับความปลอดภัยแบบ CURVE รับได้ ไลบรารียังมี zmq_z85_encode() และ zmq_z85_decode() ให้ใช้ และไลบรารีสำหรับภาษาอื่น เช่น pyzmq ก็มีฟังก์ชันเดียวกันนี้
// C (libzmq)
char text[41]; // 32 ไบต์ -> 40 อักขระ + NUL
zmq_z85_encode(text, key, 32);
# Python (pyzmq)
from zmq.utils import z85
z85.encode(bytes.fromhex('864fd26fb559f75b')) # b'HelloWorld'
บรรทัดสุดท้ายคือเวกเตอร์ทดสอบจากข้อกำหนด
ความยาวของอินพุต: ข้อควรทราบเกี่ยวกับเครื่องมือนี้
RFC 32 กำหนดให้อินพุตไบนารีมีความยาวเป็นพหุคูณของ 4 ไบต์ และสตริงที่เข้ารหัสแล้วมีความยาวเป็นพหุคูณของ 5 อักขระ ข้อกำหนดนี้ไม่มีแพดดิง และการใช้งานแบบเข้มงวด เช่น zmq_z85_encode() จะปฏิเสธความยาวอื่น
เครื่องมือนี้รับความยาวอื่นได้ด้วย โดยใช้กฎเดียวกับ Ascii85 และ Base85 คือกลุ่มสุดท้ายที่มี n ไบต์จะกลายเป็น n + 1 อักขระ ซึ่งเป็นส่วนขยายที่ไม่เป็นไปตามมาตรฐาน เอาต์พุตที่สร้างด้วยวิธีนี้อาจถูกตัวถอดรหัส Z85 อื่นปฏิเสธ หากต้องการความเข้ากันได้ ให้เติมข้อมูลจนมีความยาวเป็นพหุคูณของ 4 ไบต์ คีย์ CurveZMQ มีขนาด 32 ไบต์จึงลงตัวเสมอ
ข้อกำหนด
| ชุดตัวอักษร | 0-9 a-z A-Z .-:+=^!/*?&<>()[]{}@%$# |
|---|---|
| ขนาดเอาต์พุต | 5 อักขระต่อ 4 ไบต์ (125%) |
| แพดดิง | ไม่มี |
| มาตรฐาน | ZeroMQ RFC 32 |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | nm=QNz.92jz/PV8aP |
Base64.is | lsB}Dhz^42A@ |
你好 | <H}kFRm= |
คำถามที่พบบ่อย
Z85 กับ Ascii85 ต่างกันอย่างไร
! ถึง u ซึ่งรวมเครื่องหมายอัญประกาศและแบ็กสแลชไว้ด้วย และมีอักขระย่อ z สำหรับไบต์ศูนย์ ส่วน Z85 หลีกเลี่ยงอักขระที่ต้อง escape ในสตริง และไม่มีอักขระย่อZ85 ใช้แพดดิงหรือไม่
ไม่ใช้ ข้อกำหนดอนุญาตเฉพาะอินพุตที่มีความยาวเป็นพหุคูณของ 4 ไบต์ เครื่องมือนี้เข้ารหัสความยาวอื่นโดยให้กลุ่มสุดท้ายสั้นลง ซึ่งไม่ได้เป็นส่วนหนึ่งของมาตรฐาน
ใช้ Z85 ใน JSON, XML หรือ URL ได้หรือไม่
คีย์ CurveZMQ ที่เข้ารหัสเป็น Z85 ยาวเท่าใด
คีย์ CurveZMQ มีขนาด 32 ไบต์ จึงเข้ารหัสได้ 40 อักขระพอดี หากต้องการดูคีย์ดิบ ให้ถอดรหัสที่นี่โดยเลือกเอาต์พุตเป็น “เลขฐานสิบหก”