วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็น Base32 หรือ “ถอดรหัส” เพื่อแปลง Base32 กลับเป็นข้อความ
- เลือก “รูปแบบ” โดยค่าเริ่มต้นคือ RFC 4648 ซึ่งใช้กับคีย์ลับ TOTP และไลบรารีส่วนใหญ่
- พิมพ์หรือวางอินพุต หรือเปิดไฟล์ ผลลัพธ์จะอัปเดตทันทีขณะที่คุณพิมพ์
- คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์
Base32 คืออะไร
Base32 แทนข้อมูลไบนารีด้วยอักขระที่พิมพ์ได้ 32 ตัว อักขระแต่ละตัวเก็บข้อมูล 5 บิต อินพุตทุก 5 ไบต์จึงกลายเป็นเอาต์พุต 8 อักขระ เอาต์พุตมีขนาดใหญ่กว่าอินพุตประมาณ 60% ซึ่งสิ้นเปลืองกว่า Base64 แต่ชุดตัวอักษรไม่มีตัวพิมพ์เล็กและสัญลักษณ์ที่สับสนได้ง่าย
ชุดตัวอักษรมาตรฐานที่กำหนดใน RFC 4648 ใช้ตัวอักษร A-Z และตัวเลข 2-7 โดยตัดเลข 0, 1, 8 และ 9 ออกเพื่อไม่ให้สับสนกับตัวอักษร O, I และ B เมื่อความยาวของอินพุตไม่เป็นพหุคูณของ 5 ไบต์ เอาต์พุตจะถูกเติมด้วย = จนมีความยาวเป็นพหุคูณของ 8 อักขระ
Base32 ใช้ที่ไหนบ้าง
- การยืนยันตัวตนแบบสองปัจจัย คีย์ลับ TOTP และ HOTP ในแอปยืนยันตัวตน (ค่า
secret=ในลิงก์otpauth://) เป็นสตริง Base32 - ระบบที่ไม่แยกตัวพิมพ์เล็ก-ใหญ่ เนื่องจากชุดตัวอักษรมีตัวพิมพ์เพียงแบบเดียว Base32 จึงใช้ได้อย่างปลอดภัยบนระบบไฟล์ ป้ายชื่อ DNS และที่อยู่อีเมลที่ไม่สนใจตัวพิมพ์
- รหัสที่คนต้องพิมพ์เอง คีย์ไลเซนส์ ที่อยู่ onion และตัวระบุสั้น ๆ ใช้ Base32 เพื่อให้อ่านออกเสียงและพิมพ์ได้ง่ายขึ้น
หากขนาดสำคัญกว่าความอ่านง่าย Base64 จะกะทัดรัดกว่า หากต้องการตัวระบุสั้น ๆ ที่ไม่มีอักขระชวนสับสน ให้เปรียบเทียบ Crockford Base32 กับ Base58
รูปแบบต่าง ๆ ของ Base32
| รูปแบบ | ชุดตัวอักษร | การใช้งานทั่วไป |
|---|---|---|
| RFC 4648 | A-Z 2-7 | คีย์ลับ TOTP และงานทั่วไป |
| Base32hex | 0-9 A-V | ลำดับการเรียงตรงกับไบต์ดิบ, DNSSEC NSEC3 |
| Crockford | 0-9 A-Z ยกเว้น I, L, O, U | ID ที่อ่านง่าย, ULID |
| z-base-32 | ตัวพิมพ์เล็ก เรียงลำดับใหม่ | คีย์ที่ออกแบบให้คนใช้งาน, OpenPGP WKD, ZRTP |
Base32 ในโค้ด
# Python
import base64
base64.b32encode(b'hello') # เข้ารหัส
base64.b32decode('NBSWY3DP') # ถอดรหัส
// Node.js ไม่มี Base32 ในตัว ให้ใช้แพ็กเกจอย่าง "hi-base32"
// Go (import "encoding/base32")
base32.StdEncoding.EncodeToString(data)
ข้อกำหนด
| ชุดตัวอักษร | A-Z 2-7 |
|---|---|
| ขนาดเอาต์พุต | 8 อักขระต่อ 5 ไบต์ (160%) |
| แพดดิง | เติม = จนความยาวเป็นพหุคูณของ 8 |
| มาตรฐาน | RFC 4648 หัวข้อ 6 |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ไม่ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | JBSWY3DPFQQFO33SNRSCC=== |
Base64.is | IJQXGZJWGQXGS4Y= |
你好 | 4S62BZNFXU====== |
คำถามที่พบบ่อย
Base32 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่
ชุดตัวอักษรของ RFC 4648 กำหนดเป็นตัวพิมพ์ใหญ่ แต่ตัวถอดรหัสนี้รับอินพุตตัวพิมพ์เล็กได้ด้วย ใช้ตัวเลือก “ตัวพิมพ์เล็ก” หากต้องการเอาต์พุตเป็นตัวพิมพ์เล็ก
ทำไมสตริง Base32 ของฉันจึงลงท้ายด้วยเครื่องหมาย =
เครื่องหมายเท่ากับคือแพดดิงที่เติมบล็อกสุดท้ายให้ครบ 8 อักขระ หลายระบบรวมถึงแอป TOTP ส่วนใหญ่รับ Base32 ที่ไม่มีแพดดิงได้ ปิด “แพดดิง” เพื่อลบออก
Base32 มีขนาดใหญ่กว่าข้อมูลต้นฉบับเท่าใด
ทุก 5 ไบต์กลายเป็น 8 อักขระ เอาต์พุต Base32 จึงมีขนาดประมาณ 1.6 เท่าของอินพุต ส่วน Base64 มีขนาดประมาณ 1.33 เท่า
ถอดรหัสคีย์ลับ TOTP ด้วยเครื่องมือนี้ได้หรือไม่
ได้ วางคีย์ลับในแท็บ “ถอดรหัส” แล้วเลือกเอาต์พุตแบบ “เลขฐานสิบหก” เพื่อดูไบต์ดิบของคีย์ ช่องว่างในคีย์ลับจะถูกละเว้น