วิธีใช้งาน
- วางสตริงที่ต้องการตรวจสอบลงในช่องอินพุต
- อ่านผลการตรวจสอบ ได้แก่ ถูกต้องหรือไม่ถูกต้อง “รูปแบบ” ที่ตรวจพบ (มาตรฐานหรือปลอดภัยสำหรับ URL) และ “ขนาดหลังถอดรหัส”
- หากมีรายการใน “ปัญหา” ให้ใช้ตำแหน่งที่รายงานเพื่อค้นหาอักขระที่ไม่ถูกต้อง อักขระช่องว่าง หรือแพดดิงที่อยู่ผิดตำแหน่ง
- ดูชนิดเนื้อหาที่ตรวจพบในช่อง “เนื้อหา” เพื่อดูว่าข้อมูลเป็นข้อความหรือไฟล์ เช่น PNG, PDF หรือ ZIP
Base64 ที่ถูกต้องเป็นอย่างไร
- ชุดตัวอักษร อนุญาตเฉพาะ
A-Z,a-z,0-9และอักขระอีกสองตัว คือ+และ/ใน Base64 มาตรฐาน หรือ-และ_ใน Base64URL สตริงที่ใช้ทั้งสองคู่ปะปนกันมักเสียหาย หรือถูกนำมาต่อกันจากสองแหล่ง - แพดดิง เครื่องหมาย
=ปรากฏได้เฉพาะที่ท้ายสตริงและไม่เกินสองตัว แพดดิงที่อยู่ตรงกลางมักหมายความว่ามีค่าที่เข้ารหัสแล้วสองค่าถูกนำมาต่อกัน - ความยาว หากมีแพดดิง ความยาวจะเป็นพหุคูณของ 4 หากไม่มีแพดดิง ความยาวเท่าใดก็ได้ยกเว้น 4n + 1 เพราะอักขระที่เหลือตัวเดียวเก็บข้อมูลได้เพียง 6 บิต ไม่พอสำหรับหนึ่งไบต์
ตัวถอดรหัสแบบเข้มงวดมีกฎเพิ่มอีกหนึ่งข้อ คือบิตล่างที่ไม่ได้ใช้ของอักขระตัวสุดท้ายต้องเป็นศูนย์ ตัวถอดรหัสจำนวนมากไม่สนใจบิตเหล่านี้ แต่บางตัว เช่น base64.StdEncoding.Strict() ของ Go จะปฏิเสธสตริงนั้น
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
| ปัญหา | สาเหตุที่พบบ่อย | วิธีแก้ไข |
|---|---|---|
| อักขระไม่ถูกต้อง | เครื่องหมายคำพูด แบ็กสแลช หรือรหัส %2B และ %3D ที่ติดมากับค่าตอนคัดลอก | ลบอักขระส่วนเกินออก หรือถอดรหัส URL ก่อน |
| มีช่องว่างตรงกลาง | + ถูกเปลี่ยนเป็นช่องว่างเมื่อค่าถูกส่งผ่าน URL หรือฟอร์ม | ใส่ + กลับคืน หรือใช้ Base64URL สำหรับ URL |
| ความยาว 4n + 1 | ค่าถูกตัดทอนเพราะข้อจำกัดความยาวของคอลัมน์ บรรทัดล็อก หรือการคัดลอกไม่ครบ | คัดลอกค่าทั้งหมดใหม่อีกครั้ง |
| แพดดิงอยู่ตรงกลาง | สตริง Base64 สองชุดถูกนำมาต่อกัน | แยกออกเป็นส่วน ๆ แล้วถอดรหัสแต่ละส่วนแยกกัน |
| การขึ้นบรรทัดใหม่ | การตัดบรรทัดแบบ MIME หรือ PEM | โดยทั่วไปไม่เป็นปัญหา ให้ลบออกเมื่อต้องการให้อยู่ในบรรทัดเดียว |
ถูกต้องไม่ได้แปลว่ามีความหมาย
Base64 ไม่มีส่วนหัวและไม่มีเช็กซัม การที่สตริงถูกต้องจึงบอกได้เพียงว่าสามารถถอดรหัสได้ คำธรรมดาจำนวนมากผ่านการตรวจสอบ เพราะตัวอักษรสี่ตัวใด ๆ ก็ประกอบเป็นกลุ่มที่ถูกต้องได้ เครื่องมือตรวจสอบจึงถอดรหัสข้อมูลด้วย แล้วรายงานขนาดและชนิดเนื้อหา ข้อความที่อ่านออกได้หรือลายเซ็นไฟล์ที่รู้จัก เช่น PNG, PDF หรือ ZIP เป็นหลักฐานที่ดีว่าสตริงนั้นเป็น Base64 จริง แต่ไบต์สุ่มเพียงไม่กี่ไบต์ไม่ใช่หลักฐานที่เชื่อถือได้ หากต้องการทดสอบการเข้ารหัสอื่นด้วย ลองใช้ เครื่องมือตรวจหาการเข้ารหัส
การตรวจสอบ Base64 ในโค้ด
// JavaScript: Base64 มาตรฐานที่มีแพดดิง (ตรงกับสตริงว่างด้วย)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: แจ้งข้อผิดพลาดแทนการข้ามอักขระที่ไม่ถูกต้อง
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
คำถามที่พบบ่อย
ทำไมคำธรรมดาจึงถูกรายงานว่าเป็น Base64 ที่ถูกต้อง
test ถอดรหัสได้เป็นสามไบต์ ให้ดูชนิดเนื้อหาที่ตรวจพบ หากผลลัพธ์ไม่ใช่ทั้งข้อความที่อ่านออกได้และชนิดไฟล์ที่รู้จัก อินพุตนั้นก็อาจไม่เคยเป็น Base64 มาตั้งแต่แรกBase64 ที่มีช่องว่างหรือการขึ้นบรรทัดใหม่ถือว่าถูกต้องหรือไม่
MIME และ PEM ตัด Base64 ออกเป็นหลายบรรทัด และตัวถอดรหัสส่วนใหญ่จะข้ามอักขระช่องว่าง อย่างไรก็ตาม ฟิลด์ JSON ส่วนหัว HTTP, JWT และ data URI ต้องการสตริงต่อเนื่องเพียงชุดเดียว เครื่องมือตรวจสอบจึงแสดงอักขระช่องว่างแยกไว้ต่างหาก เพื่อให้คุณตัดสินใจได้ว่าจะมีผลหรือไม่ในที่ที่จะนำสตริงไปใช้
Base64 ที่ไม่มีแพดดิง = ถือว่าถูกต้องหรือไม่
= จนความยาวเป็นพหุคูณของ 4 ส่วนสตริงที่ไม่มีแพดดิงและยาว 4n + 1 อักขระจะไม่ถูกต้องในทุกกรณีจะตรวจสอบว่าสตริงเป็น Base64 ใน JavaScript ได้อย่างไร
atob() ภายใน try/catch แต่โปรดทราบว่า atob() จะโยน InvalidCharacterError เมื่ออินพุตไม่ถูกต้อง แต่จะยอมรับอักขระช่องว่างและแพดดิงที่ขาดหายโดยไม่แจ้งเตือน และไม่รับอักขระแบบปลอดภัยสำหรับ URL