วิธีใช้งาน
- เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็น Base32hex หรือ “ถอดรหัส” เพื่อแปลง Base32hex กลับเป็นข้อความ
- คง “รูปแบบ” ไว้ที่ Base32hex แล้วปิด “แพดดิง” หรือเปลี่ยนเป็น “ตัวพิมพ์เล็ก” หากรูปแบบข้อมูลของคุณต้องการ
- พิมพ์หรือวางอินพุต หรือเปิดไฟล์ ผลลัพธ์จะอัปเดตทันทีขณะที่คุณพิมพ์
- คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์
Base32hex คืออะไร
Base32hex คือ “Base 32 Encoding with Extended Hex Alphabet” ที่กำหนดไว้ในหัวข้อ 7 ของ RFC 4648 ซึ่งทำงานเหมือน Base32 มาตรฐานทุกประการ คืออักขระแต่ละตัวเก็บข้อมูล 5 บิต ทุก 5 ไบต์กลายเป็น 8 อักขระ และเอาต์พุตจะถูกเติมด้วย = จนความยาวเป็นพหุคูณของ 8 สิ่งที่ต่างกันมีเพียงชุดตัวอักษร แทนที่จะใช้ A-Z 2-7 Base32hex นับต่อจากจุดที่เลขฐานสิบหกหยุด คือตัวเลข 0 ถึง 9 แทนค่า 0 ถึง 9 ตัว A แทน 10 และตัว V แทน 31
เนื่องจากชุดตัวอักษรทั้งสองมีอักขระส่วนใหญ่ร่วมกัน สตริง Base32hex จึงมักป้อนให้ตัวถอดรหัส Base32 มาตรฐานได้โดยไม่เกิดข้อผิดพลาด แต่ไบต์ที่ได้ออกมาจะผิด ควรถอดรหัสด้วยรูปแบบเดียวกับที่ใช้เข้ารหัสเสมอ
ลำดับการเรียงยังคงเดิม
ชุดตัวอักษรเรียงตามลำดับ ASCII จากน้อยไปมาก และค่าของอักขระแต่ละตัวเพิ่มขึ้นตามตำแหน่ง ผลก็คือการเปรียบเทียบสตริง Base32hex สองสตริงทีละอักขระจะให้ลำดับเดียวกับการเปรียบเทียบไบต์ที่อยู่เบื้องหลัง RFC 4648 ระบุว่านี่คือคุณสมบัติที่ Base32 มาตรฐานและ Base64 ไม่มี ซึ่งทำให้ Base32hex เหมาะสำหรับใช้เป็นคีย์ในที่เก็บข้อมูลแบบเรียงลำดับ เช่น ฐานข้อมูลและ key-value store
ใช้ตัวพิมพ์แบบเดียวกันในทุกสตริง และปิดแพดดิงเมื่ออินพุตมีความยาวต่างกัน เพราะเครื่องหมาย = จะเรียงอยู่ระหว่างตัวเลขกับตัวอักษรและอาจทำให้ลำดับผิดได้
Base32hex ใน NSEC3 ของ DNSSEC
เรคคอร์ด NSEC3 ซึ่งกำหนดไว้ใน RFC 5155 ใช้พิสูจน์ว่าชื่อ DNS หนึ่งไม่มีอยู่จริง พร้อมกับทำให้การไล่รายชื่อทุกชื่อในโซนทำได้ยากขึ้น แต่ละชื่อจะถูกแฮชด้วย SHA-1 และแฮชขนาด 20 ไบต์จะเขียนเป็นป้ายชื่อ Base32hex ยาว 32 อักขระโดยไม่มีแพดดิง ซึ่งมักแสดงเป็นตัวพิมพ์เล็ก เนื่องจากการเข้ารหัสคงลำดับของแฮชไว้ ชื่อที่ผ่านการแฮชจึงเรียงต่อกันเป็นสายตามลำดับ หากต้องการแปลงแฮชเป็นป้ายชื่อแบบนี้ ให้วางแฮชเป็นอินพุตแบบเลขฐานสิบหก ปิด “แพดดิง” และเลือก “ตัวพิมพ์เล็ก” เครื่องมือนี้ทำเฉพาะขั้นตอนการเข้ารหัสเท่านั้น ไม่ได้คำนวณแฮช NSEC3 ที่ใช้ salt และการวนซ้ำ
Base32hex ในโค้ด
# Python 3.10+
import base64
base64.b32hexencode(b'foobar') # b'CPNMUOJ1E8======'
base64.b32hexdecode('CPNMUOJ1E8======') # b'foobar'
// Go (import "encoding/base32")
base32.HexEncoding.EncodeToString(data)
base32.HexEncoding.WithPadding(base32.NoPadding).EncodeToString(data)
ข้อกำหนด
| ชุดตัวอักษร | 0-9 A-V |
|---|---|
| ขนาดเอาต์พุต | 8 อักขระต่อ 5 ไบต์ (160%) |
| แพดดิง | เติม = จนความยาวเป็นพหุคูณของ 8 |
| มาตรฐาน | RFC 4648 หัวข้อ 7 |
| แยกตัวพิมพ์เล็ก-ใหญ่ | ไม่ใช่ |
ตัวอย่าง
| อินพุต (UTF-8) | เอาต์พุต |
|---|---|
Hello, World! | 91IMOR3F5GG5ERRIDHI22=== |
Base64.is | 89GN6P9M6GN6ISO= |
你好 | SIUQ1PD5NK====== |
คำถามที่พบบ่อย
Base32 กับ Base32hex ต่างกันอย่างไร
A-Z 2-7 ส่วน Base32hex ใช้ 0-9 A-V ซึ่งคงลำดับการเรียงของข้อมูลไว้ ทั้งสองแบบใช้แทนกันไม่ได้Base32hex แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่
ชุดตัวอักษรกำหนดเป็นตัวพิมพ์ใหญ่ แต่ตัวถอดรหัสนี้รับอินพุตตัวพิมพ์เล็กได้ด้วย เปิด “ตัวพิมพ์เล็ก” หากต้องการเอาต์พุตเป็นตัวพิมพ์เล็ก เช่น สำหรับป้ายชื่อ DNS
ควรใช้แพดดิงหรือไม่
= จนความยาวเป็นพหุคูณของ 8 อักขระ แต่หลายรูปแบบรวมถึง NSEC3 ละไว้ ตัวถอดรหัสรับได้ทั้งสองแบบ จึงเลือกตามที่ระบบปลายทางต้องการได้เลย