Base32 Converter: คู่มือแปลงรหัส Base32 สำหรับ TOTP Secret, DNSSEC และ ID ที่มนุษย์พิมพ์ได้
เรียนรู้วิธี encode และ decode Base32 ทั้งมาตรฐาน RFC 4648 และ Crockford ด้วย Base32 Converter ฟรีที่ทำงานในเบราว์เซอร์ 100% พร้อมตัวอย่างจริงอย่าง TOTP 2FA และ DNSSEC NSEC3
Table of Contents
ถ้าคุณเคยตั้งค่า 2FA (Two-Factor Authentication) ในแอปอย่าง Google Authenticator หรือ Authy คุณน่าจะเคยเห็นสตริงตัวอักษรพิมพ์ใหญ่ยาว ๆ ที่เต็มไปด้วยเลข 2–7 ผ่านตามาบ้าง นั่นคือ Base32 รูปแบบการ encode ที่ถูกออกแบบมาให้ "มนุษย์อ่านได้ มนุษย์พิมพ์ได้" โดยไม่สับสนระหว่างตัวอักษรหน้าตาคล้ายกัน และมันถูกใช้ในงานสำคัญตั้งแต่ TOTP secret, DNSSEC ไปจนถึงการออกแบบ ID ที่ต้องให้ผู้ใช้พิมพ์ด้วยมือ
บทความนี้จะพาคุณเข้าใจ Base32 แบบครบถ้วน ตั้งแต่หลักการทำงาน ความแตกต่างระหว่างมาตรฐาน RFC 4648 กับ Crockford Base32 ไปจนถึงวิธีใช้งานจริงผ่านเครื่องมือ Base32 Converter ของ Online Tools Forge ซึ่งแปลงได้ทั้ง encode และ decode รองรับทั้งสอง alphabet ทำงานทั้งหมดในเบราว์เซอร์ของคุณเอง ไม่ต้องติดตั้งอะไรเพิ่ม และที่สำคัญคือข้อมูลของคุณไม่ถูกส่งไปเซิร์ฟเวอร์ใด ๆ ทั้งสิ้น
ไม่ว่าคุณจะเป็น DevOps ที่ต้อง debug TOTP secret, developer ที่กำลังออกแบบระบบ ID แบบ human-typable หรือแค่อยากรู้ว่าสตริง Base32 ที่เจอใน config file ถอดรหัสออกมาเป็นอะไร เครื่องมือนี้และคู่มือนี้ช่วยคุณได้
ทำไมต้องใช้ Base32 Converter?
- Debug TOTP/HOTP secret ได้ทันที — เมื่อ OTP ที่ generate ได้ไม่ตรงกับเซิร์ฟเวอร์ สิ่งแรกที่ต้องเช็คคือ secret ที่ encode ไว้ถูกต้องหรือไม่ เครื่องมือนี้ช่วย decode secret กลับมาเป็นข้อความหรือ hex bytes เพื่อให้เทียบค่าได้ตรง ๆ
- รองรับสองมาตรฐานในเครื่องมือเดียว — ทั้ง RFC 4648 (แบบที่ใช้อยู่ใน otpauth:// URI และ DNSSEC) และ Crockford Base32 (แบบที่ออกแบบให้มนุษย์อ่านและพิมพ์ได้) ไม่ต้องสลับไปมาระหว่างเครื่องมือหลายตัว
- ควบคุม padding ได้เอง — TOTP secret ส่วนใหญ่ไม่ใส่ = padding แต่บางระบบต้องการ เครื่องมือนี้มี toggle ให้เลือกได้ จึงทดสอบได้ทั้งสองแบบ
- เห็นผลลัพธ์สามมุมมองพร้อมกัน — ทั้ง Base32 text, ข้อความ UTF-8 ที่ decode ได้ และ raw hex bytes ครบในแผงเดียว เหมาะกับการ verify ข้อมูลระดับ byte
- ความเป็นส่วนตัว 100% — ทุกอย่างประมวลผลแบบ client-side ในเบราว์เซอร์ ข้อมูลลับอย่าง secret key ไม่ถูกอัปโหลดไปไหนเลย ซึ่งสำคัญมากเมื่อคุณกำลังจัดการ credential จริง
- ฟรี ไม่ต้องล็อกอิน ไม่ต้องติดตั้ง — เปิดหน้าเว็บก็ใช้ได้เลย พร้อมปุ่ม copy ผลลัพธ์ไปวางใน terminal หรือ config file ได้ทันที
คุณสมบัติเด่น
| คุณสมบัติ | รายละเอียด |
|---|---|
| แปลงสองทิศทาง | encode ข้อความ → Base32 และ decode Base32 → ข้อความในตัวเดียว |
| สอง alphabet | RFC 4648 (A–Z, 2–7 พร้อม = padding) และ Crockford Base32 |
| Padding toggle | เปิด/ปิด = padding ได้ (สำหรับ RFC 4648) |
| สามมุมมองผลลัพธ์ | Base32 text, ข้อความ UTF-8 ที่ decode แล้ว และ raw hex bytes |
| Decoder ยืดหยุ่น | รับ input ตัวพิมพ์เล็กและข้ามช่องว่าง/ขึ้นบรรทัดใหม่อัตโนมัติ |
| Crockford normalization | แปลง alias อย่าง I → 1, O → 0 ให้อัตโนมัติ |
| เข้าถึงง่าย | ปุ่ม copy, รองรับ keyboard navigation และ ARIA live region |
| Client-side 100% | ข้อมูลไม่ออกจากเบราว์เซอร์ของคุณ |
- Decoder ที่ให้อภัยความผิดพลาด — ในทางปฏิบัติ secret ที่คัดลอกมามักมีช่องว่างปน หรือเป็นตัวพิมพ์เล็ก เครื่องมือนี้จัดการให้หมด: รับ lowercase ได้ และ ignore whitespace ทำให้คุณ paste ค่าจากอีเมลหรือเอกสารแล้ว decode ได้เลยโดยไม่ต้อง cleanup ก่อน
- Crockford normalization ในตัว — ถ้าผู้ใช้พิมพ์ ID มาเป็น i หรือ O (ซึ่งไม่มีใน alphabet ของ Crockford) เครื่องมือจะ map ให้เป็น 1 และ 0 ตามลำดับ ตรงตามสเปกของ Crockford ที่ออกแบบมาเพื่อลดความผิดพลาดจากการพิมพ์หรือการอ่านออกเสียง
- Hex bytes สำหรับงานระดับต่ำ — มุมมอง hex มีประโยชน์มากเวลา debug binary data เช่น ตรวจสอบว่า secret ที่ decode ได้มี byte ตรงกับที่ระบบ backend คาดหวังหรือไม่ โดยไม่ต้องเปิด hex editor แยก
วิธีใช้งาน
- เปิดเครื่องมือ — ไปที่ Base32 Converter บน Online Tools Forge ไม่ต้องสมัครสมาชิก ไม่ต้องติดตั้งส่วนขยายใด ๆ
- เลือกทิศทางและ alphabet — เลือกว่าจะ encode (ข้อความ → Base32) หรือ decode (Base32 → ข้อความ) แล้วเลือก alphabet ระหว่าง RFC 4648 หรือ Crockford Base32
- ป้อนข้อมูล — พิมพ์หรือ paste ข้อความ/สตริง Base32 ลงในช่อง input ถ้า decode สามารถ paste ค่าที่มีช่องว่างหรือเป็นตัวพิมพ์เล็กได้เลย
- ตั้งค่า padding (ถ้าจำเป็น) — สำหรับ RFC 4648 ให้เลือกว่าจะเติม = padding หรือไม่ ถ้าทำ TOTP secret มักต้องปิด padding ไว้
- ดูผลและ copy — ผลลัพธ์แสดงสามมุมมองพร้อมกัน: Base32 text, ข้อความ UTF-8 และ hex bytes กดปุ่ม copy เพื่อนำค่าที่ต้องการไปใช้ได้เลย
ลองดูตัวอย่างจริง: ข้อความ Hello World เมื่อ encode ด้วย RFC 4648 จะได้ JBSWY3DPEB3W64TMMQ====== (มี padding) และเมื่อ encode ด้วย Crockford จะได้ 91JPRV3F41BPYVKCC8G — ข้อมูลต้นทางเดียวกัน แต่คนละ alphabet คนละรูปแบบ เหมาะกับคนละ use case
เข้าใจ Base32: RFC 4648 vs. Crockford
Base32 ทำงานอย่างไร? — Base32 คือการ encode ข้อมูลไบนารีให้อยู่ในรูปตัวอักษร 32 ตัว โดยแบ่งข้อมูลเป็นกลุ่มกลุ่มละ 5 บิต (เพราะ 2⁵ = 32) แต่ละกลุ่ม 5 บิตจะถูก map เป็นสัญลักษณ์ 1 ตัว ดังนั้นข้อมูลต้นทาง 5 ไบต์ (40 บิต) จะถูกแปลงเป็น Base32 พอดี 8 ตัวอักษร ทำให้อัตราส่วนขนาดอยู่ที่ 8:5 หรือข้อมูลบวมขึ้นประมาณ 60% (เทียบกับ Base64 ที่บวมขึ้นราว 33%) แลกมากับชุดตัวอักษรที่ปลอดภัยและอ่านง่ายกว่า
RFC 4648 คือมาตรฐานทางการที่กำหนด alphabet เป็นตัวอักษรพิมพ์ใหญ่ A–Z (26 ตัว) ตามด้วยตัวเลข 2–7 (6 ตัว) รวมเป็น 32 ตัวพอดี ที่ใช้แค่ 2–7 เพราะเลข 0, 1, 8, 9 ไม่ได้เป็นส่วนหนึ่งของค่า 5 บิตที่ลงตัวใน scheme นี้ และถ้าข้อมูลต้นทางไม่ลงตัวเป็นกลุ่ม 8 ตัวอักษร จะมีการเติม = padding ต่อท้ายให้ครบ เช่น Hello World (11 ไบต์) จะได้ JBSWY3DPEB3W64TMMQ====== ซึ่งมี = ถึง 6 ตัว ข้อดีของ RFC 4648 คือ case-insensitive (ตัวพิมพ์ใหญ่หรือเล็กมีความหมายเดียวกัน) จึงปลอดภัยกับระบบที่ไม่สนตัวพิมพ์ใหญ่เล็ก และหลีกเลี่ยงตัวอักษรที่สับสนง่ายอย่าง 0/O, 1/I/L, 8/B ในระดับหนึ่ง
Crockford Base32 ถูกเสนอโดย Douglas Crockford ด้วยเป้าหมายต่างออกไป: ทำให้มนุษย์ อ่าน พิมพ์ และจดจำ ได้สะดวกที่สุด alphabet ของมันคือ 0–9 ตามด้วยตัวอักษร แต่ ตัด I, L, O, U ทิ้ง — ตัด I และ L เพราะหน้าตาคล้ายเลข 1, ตัด O เพราะคล้ายเลข 0 และตัด U เพื่อหลีกเลี่ยงคำอุทานไม่สุภาพในภาษาอังกฤษ นอกจากนี้ยังกำหนด normalization alias ไว้ด้วย: ถ้าเจอ I หรือ i ให้อ่านเป็น 1, เจอ O หรือ o ให้อ่านเป็น 0 และรับตัวพิมพ์เล็กได้ทั้งหมด ผลคือ ID แบบ Crockford ทนทานต่อความผิดพลาดของมนุษย์อย่างมาก และผลลัพธ์มักสั้นกว่าเพราะไม่ใช้ padding เช่น Hello World ได้ 91JPRV3F41BPYVKCC8G
สรุปง่าย ๆ: RFC 4648 คือมาตรฐานสำหรับเครื่องและโปรโตคอล (TOTP, DNSSEC, otpauth://) ส่วน Crockford คือตัวเลือกสำหรับงานที่มนุษย์ต้องพิมพ์หรืออ่านค่าด้วยตา
Use Case ในทางปฏิบัติ
TOTP / HOTP และ 2FA
นี่คือ use case ที่พบบ่อยที่สุดของ Base32 ในชีวิตประจำวันของ developer ระบบ 2FA แบบ TOTP (Time-based One-Time Password, RFC 6238) และ HOTP (RFC 4226) เก็บ shared secret ในรูป Base32 RFC 4648 และส่งผ่าน otpauth:// URI เช่น:
otpauth://totp/Example:[email protected]?secret=JBSWY3DPEB3W64TMMQ&issuer=Example&algorithm=SHA1&digits=6&period=30
สังเกตว่า secret ใน URI ไม่ใส่ padding (JBSWY3DPEB3W64TMMQ ไม่ใช่ JBSWY3DPEB3W64TMMQ======) เพราะไลบรารี authenticator ส่วนใหญ่คาดหวัง secret แบบไม่มี = ถ้าคุณกำลัง debug ว่าทำไม OTP ไม่ตรง ให้ลอง decode secret กลับมาดูเป็น hex แล้วเทียบกับค่าในฐานข้อมูล — บ่อยครั้งปัญหาอยู่ที่ padding หรือช่องว่างที่ปนมาตอนคัดลอก
DNSSEC NSEC3
ใน DNSSEC การ hash ชื่อโดเมนใน record แบบ NSEC3 ใช้การ encode ผลลัพธ์ hash ด้วย Base32 RFC 4648 (แบบไม่ใส่ padding ในทางปฏิบัติ) ตัวอย่างชื่อ NSEC3 record จะหน้าตาแบบนี้:
0p9mhaveqvm6t7vbl5lop2u3t2rp3tom.example.com.
สตริง 0p9mhaveqvm6t7vbl5lop2u3t2rp3tom คือ Base32 ของ SHA-1 hash นั่นเอง เวลา troubleshoot DNSSEC ด้วย dig หรือ delv การ decode ค่าพวกนี้ออกมาเป็น hex ช่วยให้คุณจับคู่ hash กับชื่อโดเมนได้ว่า record ไหนครอบคลุมโดเมนอะไร
Human-Typable ID
ถ้าคุณออกแบบระบบที่ต้องให้ผู้ใช้พิมพ์ ID ด้วยมือ เช่น รหัสคูปอง รหัสเชิญ (invite code) หรือ short link ที่ต้องอ่านจากหน้าจอโทรศัพท์ Crockford Base32 คือตัวเลือกที่ดีมาก เพราะตัดตัวอักษรที่สับสนออก รับ lowercase ได้ และมี alias แก้ไขความผิดพลาดให้ในตัว ID อย่าง 91JPRV3F41BPYVKCC8G อ่านและพิมพ์ได้ง่ายกว่า Base64 อย่างชัดเจน (ลองนึกถึง / และ + ใน Base64 ที่ต้อง escape ใน URL) และต่างจาก Base58 ตรงที่ Crockford เป็น case-insensitive ทำให้ปลอดภัยกับระบบที่ไม่แยกตัวพิมพ์ใหญ่เล็ก
การส่งข้อมูลแบบ Case-Insensitive
บางช่องทางส่งข้อมูลไม่รับประกัน case ของตัวอักษร เช่น ระบบ legacy, DNS label, หรือการอ่านออกเสียงทางโทรศัพท์ Base32 (ทั้ง RFC 4648 และ Crockford) เป็น case-insensitive โดยออกแบบ จึงส่งผ่านช่องทางเหล่านี้ได้โดยข้อมูลไม่เสียหาย ต่างจาก Base64 ที่ a กับ A เป็นคนละค่ากัน ถ้าคุณต้อง encode ข้อมูลไบนารีให้รอดผ่านช่องทางที่ "ไม่สนตัวพิมพ์" Base32 คือคำตอบที่ถูกต้องตามมาตรฐาน
Best Practices
- เช็คเรื่อง padding ทุกครั้ง — ก่อนนำ Base32 ไปใช้กับระบบอื่น ให้เช็คว่าระบบนั้นคาดหวังแบบมีหรือไม่มี = padding สำหรับ TOTP ส่วนใหญ่คือ "ไม่มี" แต่ถ้าส่งค่าใน MIME หรือโปรโตคอลตาม RFC 4648 เป๊ะ ๆ อาจต้องมี
- อย่าสับสนสอง alphabet — RFC 4648 กับ Crockford ใช้ตารางคนละชุด ค่าเดียวกัน encode ออกมาไม่เหมือนกัน ระบุให้ชัดในเอกสารและ API ของทีมว่าคุณกำลังใช้แบบไหน
- ใช้ hex เป็นตัวกลางตอน debug — เมื่อค่า Base32 ไม่ตรงกัน ให้ decode ทั้งสองฝั่งเป็น hex bytes แล้วเทียบระดับ byte จะหาสาเหตุได้เร็วกว่าเทียบสตริง Base32 ตรง ๆ
- ระวังช่องว่างตอนคัดลอก — secret ที่คัดลอกจากอีเมลหรือ QR มักมีช่องว่างหรือ newline ปน แม้เครื่องมือนี้จะ ignore whitespace ให้ แต่ในโค้ด production ควร trim input ก่อน decode เสมอ
- อย่า encode ข้อมูลใหญ่ด้วย Base32 — Base32 ทำให้ข้อมูลบวมขึ้น ~60% เหมาะกับข้อมูลสั้น ๆ อย่าง secret, hash หรือ ID ถ้าต้อง encode ไฟล์หรือ payload ใหญ่ ๆ Base64 หรือการส่งแบบ binary เหมาะกว่า
- จัดการ secret อย่างปลอดภัย — Base32 เป็นแค่การ encode ไม่ใช่การเข้ารหัส (encryption) secret ที่ encode แล้วยังคงเป็นความลับ ต้องไม่ commit เข้า git หรือ log ทิ้งไว้ ใช้ environment variable หรือ secret manager เสมอ
เริ่มแปลง Base32 วันนี้
Base32 อาจดูเป็นเรื่องเล็ก แต่เป็นรายละเอียดที่สร้างความแตกต่างระหว่าง "2FA ใช้ได้" กับ "2FA พังโดยไม่รู้ว่าทำไม" การมีเครื่องมือแปลงที่เชื่อถือได้ ติดมือไว้ช่วยประหยัดเวลา debug ได้มหาศาล
ลองเปิด Base32 Converter แล้วทดสอบกับ secret หรือ ID ที่คุณมีอยู่ตอนนี้ได้เลย — encode ข้อความดูสักค่า, decode สตริงที่ค้างอยู่ใน config มานาน, หรือสลับระหว่าง RFC 4648 กับ Crockford เพื่อดูว่าระบบของคุณต้องการแบบไหน ทุกอย่างเสร็จในหน้าเดียว ทำงานในเบราว์เซอร์ของคุณเอง ข้อมูลไม่ไปไหน และฟรีตลอดใช้งาน
เครื่องมือที่เกี่ยวข้อง:
- Base64 Encoder — encode/decode Base64 สำหรับงานทั่วไปที่ต้องการขนาดผลลัพธ์เล็กกว่า Base32
- Base45 Converter — การ encode แบบ Base45 ที่ใช้ใน QR code ยุคใหม่ เช่น EU Digital Green Certificate
- Base58 Converter — Base58 ที่ตัดตัวอักษรกำกวมออก ใช้อย่างแพร่หลายใน cryptocurrency address
ขอให้มีความสุขกับการ encode!