ตัวเข้ารหัสและถอดรหัส Base32

แปลงข้อความ ไบต์เลขฐานสิบหก หรือไฟล์เป็น Base32 และแปลงกลับ เลือกชุดตัวอักษร RFC 4648, Base32hex, Crockford หรือ z-base-32 และกำหนดแพดดิงกับตัวพิมพ์ได้

ทำงานภายในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดข้อมูลใด ๆ

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็น Base32 หรือ “ถอดรหัส” เพื่อแปลง Base32 กลับเป็นข้อความ
  2. เลือก “รูปแบบ” โดยค่าเริ่มต้นคือ RFC 4648 ซึ่งใช้กับคีย์ลับ TOTP และไลบรารีส่วนใหญ่
  3. พิมพ์หรือวางอินพุต หรือเปิดไฟล์ ผลลัพธ์จะอัปเดตทันทีขณะที่คุณพิมพ์
  4. คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์

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 4648A-Z 2-7คีย์ลับ TOTP และงานทั่วไป
Base32hex0-9 A-Vลำดับการเรียงตรงกับไบต์ดิบ, DNSSEC NSEC3
Crockford0-9 A-Z ยกเว้น I, L, O, UID ที่อ่านง่าย, 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.isIJQXGZJWGQXGS4Y=
你好4S62BZNFXU======

คำถามที่พบบ่อย

Base32 แยกตัวพิมพ์เล็ก-ใหญ่หรือไม่

ชุดตัวอักษรของ RFC 4648 กำหนดเป็นตัวพิมพ์ใหญ่ แต่ตัวถอดรหัสนี้รับอินพุตตัวพิมพ์เล็กได้ด้วย ใช้ตัวเลือก “ตัวพิมพ์เล็ก” หากต้องการเอาต์พุตเป็นตัวพิมพ์เล็ก

ทำไมสตริง Base32 ของฉันจึงลงท้ายด้วยเครื่องหมาย =

เครื่องหมายเท่ากับคือแพดดิงที่เติมบล็อกสุดท้ายให้ครบ 8 อักขระ หลายระบบรวมถึงแอป TOTP ส่วนใหญ่รับ Base32 ที่ไม่มีแพดดิงได้ ปิด “แพดดิง” เพื่อลบออก

Base32 มีขนาดใหญ่กว่าข้อมูลต้นฉบับเท่าใด

ทุก 5 ไบต์กลายเป็น 8 อักขระ เอาต์พุต Base32 จึงมีขนาดประมาณ 1.6 เท่าของอินพุต ส่วน Base64 มีขนาดประมาณ 1.33 เท่า

ถอดรหัสคีย์ลับ TOTP ด้วยเครื่องมือนี้ได้หรือไม่

ได้ วางคีย์ลับในแท็บ “ถอดรหัส” แล้วเลือกเอาต์พุตแบบ “เลขฐานสิบหก” เพื่อดูไบต์ดิบของคีย์ ช่องว่างในคีย์ลับจะถูกละเว้น