วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความหรือไบต์เป็น Base85 หรือเลือก “ถอดรหัส” เพื่อแปลง Base85 กลับเป็นข้อมูล
- พิมพ์หรือวางอินพุต หรือคลิก “เปิดไฟล์” หากทำงานกับไบต์ดิบ ให้ตั้ง “รูปแบบอินพุต” เป็น “เลขฐานสิบหก”
- ผลลัพธ์จะอัปเดตทันทีขณะที่คุณพิมพ์ เมื่อถอดรหัส ให้ตั้ง “รูปแบบเอาต์พุต” เป็น “ข้อความ” หรือ “เลขฐานสิบหก” ตามชนิดของข้อมูล
- กด “คัดลอก” เพื่อคัดลอกผลลัพธ์ หรือ “ดาวน์โหลด” เพื่อบันทึกเป็นไฟล์
Base85 คืออะไร
Base85 คือกลุ่มของการเข้ารหัสที่แปลงข้อมูลทุก 4 ไบต์เป็น 5 อักขระ เลขฐาน 85 ห้าหลักเก็บค่าได้ 85 × 85 × 85 × 85 × 85 = 4,437,053,125 ค่า ซึ่งเพียงพอสำหรับตัวเลข 32 บิตทุกค่าพอดี เอาต์พุตจึงใหญ่กว่าอินพุตเพียง 25% เทียบกับ 33% ของ Base64
Base85 มีชุดตัวอักษรหลายแบบและใช้แทนกันไม่ได้ ได้แก่ Ascii85 (Adobe, PDF) Z85 (ZeroMQ) และแบบที่ใช้ในหน้านี้ ซึ่งประกอบด้วย 0-9, A-Z, a-z และสัญลักษณ์อีก 23 ตัว ได้แก่ !#$%&()*+-;<=>?@^_`{|}~ โดยไม่มีเครื่องหมายอัญประกาศ จุลภาค มหัพภาค ทับ ทวิภาค แบ็กสแลช และวงเล็บเหลี่ยม
RFC 1924, Git และ Python
ชุดอักขระนี้มาจาก RFC 1924 “A Compact Representation of IPv6 Addresses” ซึ่งเผยแพร่เมื่อวันที่ 1 เมษายน 1996 เป็นเรื่องตลกวันเมษาหน้าโง่ โดยเสนอให้เขียนที่อยู่ IPv6 ขนาด 128 บิตเป็นเลขฐาน 85 ตัวเดียวที่ยาว 20 อักขระพอดี ไม่มีใครเขียนที่อยู่ IPv6 แบบนั้นจริง แต่ภายหลังชุดตัวอักษรนี้ถูกนำมาใช้กับข้อมูลไบนารีทั่วไป:
- Git จัดเก็บไฟล์ไบนารีในแพตช์ (
git diff --binary,git format-patch) เป็นข้อมูลที่บีบอัดด้วย zlib แล้วเข้ารหัสด้วยชุดตัวอักษรนี้ โดยมีอักขระบอกความยาวอยู่ที่ต้นแต่ละบรรทัด - Python ตั้งแต่เวอร์ชัน 3.4 มี
base64.b85encode()และb85decode()ซึ่งให้เอาต์พุตตรงกับเครื่องมือนี้ - Mercurial ใช้การเข้ารหัสแบบเดียวกันสำหรับไฟล์ไบนารีใน diff แบบ Git
โปรดทราบว่า RFC 1924 แปลงที่อยู่ 128 บิตทั้งหมดในครั้งเดียว ขณะที่ Git, Python และเครื่องมือนี้ทำงานเป็นกลุ่มละ 4 ไบต์ ค่าขนาด 16 ไบต์จึงให้ผลลัพธ์ต่างจากวิธีของ RFC
กลุ่มสุดท้ายที่ไม่ครบ
เมื่อความยาวของอินพุตไม่ใช่พหุคูณของ 4 กลุ่มสุดท้ายจะถูกเติมด้วยไบต์ศูนย์ก่อนเข้ารหัส แล้วเก็บไว้เพียง n + 1 อักขระแรก คือ 1 ไบต์กลายเป็น 2 อักขระ 2 ไบต์กลายเป็น 3 อักขระ และ 3 ไบต์กลายเป็น 4 อักขระ ตัวถอดรหัสจะทำย้อนกลับ จึงไม่ต้องใช้อักขระแพดดิง รูปแบบนี้ไม่มีอักขระย่อสำหรับไบต์ศูนย์ ต่างจาก z ของ Ascii85
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
ข้อกำหนด
| ชุดตัวอักษร | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| ขนาดเอาต์พุต | 5 อักขระต่อ 4 ไบต์ (125%) |
| แพดดิง | ไม่มี |
| มาตรฐาน | ชุดอักขระตาม RFC 1924 (Git, Python b85) |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
คำถามที่พบบ่อย
Base85 เหมือนกับ Ascii85 หรือไม่
z และอาจครอบด้วยตัวกำหนดขอบเขตของ Adobe ใช้หน้า Ascii85 สำหรับข้อมูล PDF และ PostScriptRFC 1924 เป็นมาตรฐานจริงหรือไม่
ไม่ใช่ เป็น RFC ประเภทให้ข้อมูล (informational) ที่เผยแพร่เป็นเรื่องตลกวันเมษาหน้าโง่ และไม่เคยถูกใช้กับที่อยู่ IPv6 เลย ชุดอักขระของมันได้รับความนิยมภายหลังผ่าน Git และ Python
เอาต์พุต Base85 ใหญ่ขึ้นเท่าใด
ใส่ Base85 ใน JSON หรือ XML ได้หรือไม่
<, > และ & และ Base85 ไม่ปลอดภัยสำหรับ URL