ตัวเข้ารหัสและถอดรหัสเลขฐานสิบหก (Base16)

แปลงข้อความ ไฟล์ หรือไบต์ดิบเป็นเลขฐานสิบหกและแปลงกลับ เลือกตัวพิมพ์ ตัวคั่น และตัวนำหน้า 0x หรือ \x ได้ ส่วนตัวถอดรหัสจะจัดการรูปแบบเลขฐานสิบหกที่พบบ่อยให้เอง

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

วิธีใช้งาน

  1. เลือก “เข้ารหัส” เพื่อแปลงข้อความเป็นเลขฐานสิบหก หรือ “ถอดรหัส” เพื่อแปลงเลขฐานสิบหกกลับเป็นข้อความ
  2. พิมพ์หรือวางอินพุต หรือเปิดไฟล์เพื่อดูไบต์ของไฟล์ในรูปเลขฐานสิบหก
  3. ตั้งค่าตัวเลือก ได้แก่ “ตัวพิมพ์ใหญ่” “ตัวคั่น” (ไม่มี ช่องว่าง หรือทวิภาค) และ “ตัวนำหน้า” (ไม่มี 0x หรือ \x)
  4. คัดลอกผลลัพธ์หรือดาวน์โหลดเป็นไฟล์

เลขฐานสิบหก (Base16) คืออะไร

เลขฐานสิบหกใช้สัญลักษณ์สิบหกตัว ได้แก่ตัวเลข 0 ถึง 9 และตัวอักษร A ถึง F เลขฐานสิบหกหนึ่งหลักเก็บข้อมูลสี่บิต ทุกไบต์จึงเขียนเป็นสองหลักพอดี ตั้งแต่ 00 ถึง FF เอาต์พุตมีขนาดเป็นสองเท่าของอินพุต ซึ่งมากกว่า Base64 หรือ Base32 แต่ยังมองเห็นขอบเขตของแต่ละไบต์ได้ชัดเจน ดีบักเกอร์ โปรแกรมแก้ไขเลขฐานสิบหก (hex editor) และเครื่องมือเครือข่ายจึงแสดงข้อมูลในรูปแบบนี้

RFC 4648 กำหนดมาตรฐานการเข้ารหัสนี้ในชื่อ Base16 โดยใช้ชุดตัวอักษรตัวพิมพ์ใหญ่และไม่มีแพดดิง ในทางปฏิบัติตัวพิมพ์เล็กก็พบได้บ่อยพอกัน และตัวถอดรหัสต่าง ๆ รวมถึงตัวถอดรหัสนี้รับได้ทั้งสองแบบ

เลขฐานสิบหกใช้ที่ไหนบ้าง

  • แฮชและคีย์ ไดเจสต์ SHA-256 มีขนาด 32 ไบต์ เขียนเป็นเลขฐานสิบหก 64 หลัก คีย์เข้ารหัสลับ UUID และเช็กซัมก็มักแสดงเป็นเลขฐานสิบหกเช่นกัน
  • ที่อยู่ฮาร์ดแวร์ MAC address คือเลขฐานสิบหกขนาดหกไบต์ ซึ่งปกติคั่นด้วยทวิภาค ตัวคั่นแบบ “ทวิภาค” จะสร้างผลลัพธ์ในรูปแบบนั้น
  • Escape sequence สตริงในภาษา C, Python และ JavaScript รับ \x ตามด้วยเลขฐานสิบหกสองหลักแทนไบต์หนึ่งไบต์ ซึ่งตรงกับสิ่งที่ตัวเลือกตัวนำหน้า \x เขียนออกมา
  • รูปแบบบนเว็บ สีใน CSS อย่าง #FF8800 คือสามไบต์ในรูปเลขฐานสิบหก และการเข้ารหัสแบบเปอร์เซ็นต์ใน URL เขียนแต่ละไบต์เป็น % ตามด้วยเลขฐานสิบหกสองหลัก

ถอดรหัสเลขฐานสิบหกเป็นข้อความ

ตัวถอดรหัสยืดหยุ่นเรื่องรูปแบบ โดยรับตัวเลขทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ละเว้นช่องว่าง การขึ้นบรรทัดใหม่ จุลภาค ทวิภาค อัฒภาค และขีดกลาง และตัดตัวนำหน้า 0x, \x, % และ &#x ออก คุณจึงวางผลลัพธ์จาก xxd -p, MAC address, UUID, รายการ 0x ที่คั่นด้วยจุลภาค, escape แบบ %XX และ HTML entity แบบเลขฐานสิบหกได้ตามที่เป็นอยู่ แต่ละไบต์ต้องมีสองหลัก หากจำนวนหลักเป็นเลขคี่จะถูกแจ้งเป็นข้อผิดพลาด ไบต์ที่ได้จะแสดงเป็นข้อความตามการเข้ารหัสอักขระที่เลือกไว้

หากต้องการเปลี่ยนเลขฐานสิบหกเป็นการเข้ารหัสอื่นโดยไม่ผ่านข้อความ ให้ใช้ Hex เป็น Base64 หรือ Base64 เป็น Hex

เลขฐานสิบหกในโค้ด

# Python
'Hi'.encode().hex()                 # '4869'
bytes.fromhex('4869').decode()      # 'Hi'

// Node.js
Buffer.from('Hi').toString('hex')             // '4869'
Buffer.from('4869', 'hex').toString('utf8')   // 'Hi'

# Shell
printf 'Hi' | xxd -p                # 4869

ข้อกำหนด

ชุดตัวอักษร0-9 A-F
ขนาดเอาต์พุต2 อักขระต่อไบต์ (200%)
แพดดิงไม่มี
มาตรฐานRFC 4648 หัวข้อ 8
แยกตัวพิมพ์เล็ก-ใหญ่ไม่ใช่

ตัวอย่าง

อินพุต (UTF-8)เอาต์พุต
Hello, World!48656c6c6f2c20576f726c6421
Base64.is4261736536342e6973
你好e4bda0e5a5bd

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

จะแปลงเลขฐานสิบหกเป็นข้อความได้อย่างไร

สลับไปที่ “ถอดรหัส” แล้ววางเลขฐานสิบหก ช่องว่าง ทวิภาค และตัวนำหน้า 0x หรือ \x จะถูกลบออกโดยอัตโนมัติ และไบต์จะแสดงเป็นข้อความ UTF-8 เว้นแต่คุณจะเลือกการเข้ารหัสอักขระอื่น

ควรใช้เลขฐานสิบหกตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก

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

ทำไมเลขฐานสิบหกจึงยาวเป็นสองเท่าของต้นฉบับ
แต่ละไบต์กลายเป็นอักขระสองตัว ขนาดจึงเพิ่มขึ้น 100% ขณะที่ Base64 เพิ่มขึ้นเพียงประมาณ 33% หากขนาดเป็นเรื่องสำคัญ ให้แปลงไบต์ด้วย Hex เป็น Base64
สิ่งนี้เหมือนกับการแปลงตัวเลขเป็นเลขฐานสิบหกหรือไม่
ไม่เชิง เครื่องมือนี้เข้ารหัสลำดับของไบต์ เช่น ไบต์ของข้อความ หากต้องการแปลงจำนวนเต็มตัวเดียว เช่น 255 เป็น FF ให้ใช้ ตัวแปลงเลขฐาน