เข้ารหัส / ถอดรหัส
เข้ารหัสหรือถอดรหัส Base64, Base64URL, URL percent-encoding, HTML entities และเลขฐานสิบหกขณะพิมพ์ รองรับ UTF-8 เต็มรูปแบบ
ไม่มีสิ่งที่คุณกรอกถูกจัดเก็บ - แปลงและส่งกลับในคำขอเดียวกัน
เข้ารหัสหรือถอดรหัส Base64, Base64URL, URL percent-encoding, HTML entities และเลขฐานสิบหกขณะพิมพ์ รองรับ UTF-8 เต็มรูปแบบ
ไม่มีสิ่งที่คุณกรอกถูกจัดเก็บ - แปลงและส่งกลับในคำขอเดียวกัน
โทเค็นในล็อก query string ในการเปลี่ยนเส้นทาง อีเมลที่เต็มไปด้วย & ข้อความที่ถูกเข้ารหัสโผล่มาทุกที่ในงาน วางที่นี่ เลือกรูปแบบ แล้วดูผลลัพธ์ที่เข้ารหัสหรือถอดรหัสได้ทันทีขณะพิมพ์
JSON Web Token คือข้อมูล Base64URL สามส่วนที่คั่นด้วยจุด ได้แก่ header, payload และ signature วางส่วนตรงกลาง เลือก Base64URL แล้วถอดรหัส คุณจะเห็น claim แบบ JSON เช่น id ผู้ใช้และเวลาหมดอายุ exp (Unix timestamp ที่อ่านได้ด้วยเครื่องมือแปลง Unix timestamp) การถอดรหัสไม่ใช่การตรวจสอบ ใครก็อ่าน payload ของ JWT ได้ และมีเพียงการตรวจ signature บนเซิร์ฟเวอร์เท่านั้นที่พิสูจน์ได้ว่าไม่ถูกแก้ไข
Base64 ที่ถูกตัด padding ออก ซึ่งบางระบบทำเพื่อประหยัดพื้นที่ จะใช้ไม่ได้กับตัวถอดรหัสที่เข้มงวด เครื่องมือนี้เติมเครื่องหมาย = ที่ขาดไปและแจ้งให้คุณทราบ เซิร์ฟเวอร์จำนวนมากตีความ + ใน query string เป็นช่องว่าง ค่า Base64 ที่วางลงในลิงก์โดยไม่เข้ารหัสจึงเสียหายเมื่อไปถึง ให้เข้ารหัสเป็นส่วนประกอบของ URL หรือใช้ Base64URL ข้อความที่ถูกเข้ารหัสสองครั้งจะแสดงเป็น %2520 หรือ & และต้องถอดรหัสสองครั้ง
การถอดรหัส Base64 ข้ามช่องว่างและการขึ้นบรรทัดใหม่ ค่าที่ถูกตัดเป็นหลายบรรทัดเช่นในอีเมลจึงถอดรหัสได้ตามที่วางเลย Base64URL รับ + และ / ได้ด้วย แต่ Base64 ปกติไม่รับ - และ _ ส่วนหนึ่งของ JWT จึงต้องใช้ตัวเลือก Base64URL การถอดรหัส hex ข้ามช่องว่าง เครื่องหมายทวิภาค จุลภาค ขีด และคำนำหน้า 0x ทั้ง 48:65:6c:6c:6f และ 0x48 0x65 จึงใช้ได้ การถอดรหัส URL เปลี่ยน + เป็นช่องว่าง เครื่องหมายบวกจริงจึงต้องส่งมาเป็น %2B การเข้ารหัส HTML escape อักขระห้าตัว & < > " และ ' ส่วนการถอดรหัส HTML เข้าใจ named entity ทุกตัวของ HTML5 เช่น และ … รวมถึงแบบตัวเลขเช่น ₹ สำหรับสัญลักษณ์รูปี
การเข้ารหัส URL ที่นี่เข้ารหัสค่าเดียว เช่น พารามิเตอร์คิวรีหนึ่งตัว จึง escape อักขระสงวนทุกตัว: https://example.com/a b?x=1&y=2 จะกลายเป็น https%3A%2F%2Fexample.com%2Fa%20b%3Fx%3D1%26y%3D2 ให้เข้ารหัสเฉพาะค่าที่จะใส่ในลิงก์ ไม่ใช่ทั้งลิงก์ ข้อความนอก ASCII จะถูกเข้ารหัสเป็นไบต์ UTF-8 ของมัน: café ₹ จะกลายเป็น caf%C3%A9%20%E2%82%B9 และฐานสิบหกแสดงไบต์ชุดเดียวกัน é เป็น c3 a9 และ ₹ เป็น e2 82 b9 Base64 ของ user:pass คือ dXNlcjpwYXNz ซึ่งเป็นค่าที่ส่วนหัว HTTP Basic Authorization ใช้ (RFC 7617) ใครก็ตามที่เห็นส่วนหัวนั้นจึงอ่านรหัสผ่านได้
ไบต์เหล่านั้นเป็น UTF-8 แต่ถูกอ่านเป็น Latin-1 หรือ Windows-1252 ที่ไหนสักแห่งก่อนถูกเข้ารหัส การถอดรหัสที่นี่แสดงไบต์ตามจริง การแก้ไขต้องทำที่ระบบที่สร้างไบต์เหล่านั้น
วางข้อความได้สูงสุด 200,000 ตัวอักษร สำหรับไฟล์ไบนารีอย่างรูปภาพ ไบต์ที่ถอดรหัสแล้วจะแสดงเป็น hex แทนการสร้างไฟล์ให้ดาวน์โหลด
ไม่ใช่ Base64 แค่เปลี่ยนวิธีเขียนไบต์ให้ผ่านระบบที่รับเฉพาะข้อความธรรมดาได้ ใครก็ถอดรหัสได้ อย่าใช้เพื่อซ่อนรหัสผ่านหรือความลับเด็ดขาด
Base64URL ใช้ "-" และ "_" แทน "+" และ "/" และมักตัด padding "=" ออก ผลลัพธ์จึงปลอดภัยเมื่ออยู่ใน URL และชื่อไฟล์ JSON Web Token ใช้รูปแบบนี้
ไม่ ข้อความถูกแปลงและส่งกลับในคำขอเดียวกัน และไม่เคยถูกเขียนลงฐานข้อมูลหรือล็อก
เครื่องมือนี้ escape อักขระ ! ' ( ) และ * ด้วย ซึ่ง encodeURIComponent ปล่อยไว้ตามเดิม ดังนั้น it's (50%) off! จะกลายเป็น it%27s%20%2850%25%29%20off%21 ทั้งสองแบบถอดรหัสได้ข้อความเดียวกัน และการ escape อักขระเหล่านี้ในค่าคิวรีปลอดภัยเสมอ ช่องว่างจะกลายเป็น %20 ไม่ใช่ + รูปแบบ + มาจากการเข้ารหัสฟอร์ม HTML และตัวถอดรหัสที่นี่อ่านได้ทั้งสองแบบ
บน Linux หรือ Mac คำสั่ง echo -n 'Hello, World' | base64 ให้ผล SGVsbG8sIFdvcmxk และ echo 'SGVsbG8sIFdvcmxk' | base64 --decode จะแปลงกลับเป็นข้อความ ถ้าไม่ใส่ -n คำสั่ง echo จะเติมการขึ้นบรรทัดใหม่ซึ่งถูกเข้ารหัสไปด้วย ได้ผลเป็น SGVsbG8sIFdvcmxkCg== ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดที่สองเครื่องมือให้ผลไม่ตรงกัน ใน PowerShell ใช้ [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('Hello, World')) เพื่อเข้ารหัส และ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String('SGVsbG8sIFdvcmxk')) เพื่อถอดรหัส หน้านี้เข้ารหัสอักขระตามที่คุณวางทุกตัวเป็น UTF-8 และไม่เติมการขึ้นบรรทัดใหม่
วางเฉพาะส่วนหลังเครื่องหมายจุลภาค: ใน data:image/png;base64,iVBORw0KGgo... ส่วนนั้นคือ iVBORw0KGgo... เพราะคำนำหน้า data:image/png;base64, ไม่ใช่ Base64 และข้อความทั้งก้อนจะถูกปฏิเสธ เลือก Base64 แล้วกด Decode ไบต์ที่ไม่ใช่ข้อความจะแสดงเป็น hex แทนการวาดเป็นรูป ซึ่งก็พอจะบอกได้ว่าเป็นไฟล์อะไร: PNG ขึ้นต้นด้วย 89 50 4e 47, JPEG ด้วย ff d8 ff และไฟล์ .docx, .xlsx หรือไฟล์แบบ ZIP อื่นทั้งไฟล์ด้วย 50 4b 03 04 หากต้องการดูตัวรูป ให้วาง data URI ทั้งหมดลงในแถบที่อยู่ของเบราว์เซอร์ ข้อมูลเข้าจำกัดที่ 200,000 อักขระ หรือประมาณ 150,000 ไบต์ของไฟล์
Base64 เขียนทุก 3 ไบต์เป็น 4 อักขระ และเติม = ให้กลุ่มสุดท้ายครบเป็นพหุคูณของ 4 (RFC 4648) ผลลัพธ์จึงเป็น 4/3 ของจำนวนไบต์ขาเข้า ปัดขึ้น Hello, World มี 12 ไบต์และกลายเป็น 16 อักขระ SGVsbG8sIFdvcmxk การนับเป็นไบต์ UTF-8 ไม่ใช่ตัวอักษร: café มี 4 อักขระแต่ 5 ไบต์และได้ Y2Fmw6k= ส่วน ₹100 มี 6 ไบต์และได้ 4oK5MTAw อักษรไทยแต่ละตัวใช้ 3 ไบต์ใน UTF-8 ข้อความไทยจึงได้ Base64 ยาวกว่าจำนวนตัวอักษรมาก ไฟล์แนบอีเมลใหญ่ขึ้นอีกเล็กน้อย เพราะ MIME ตัด Base64 เป็นบรรทัดละไม่เกิน 76 อักขระ (RFC 2045) และหน้านี้ข้ามการขึ้นบรรทัดเหล่านั้นตอนถอดรหัส Base64URL แบบไม่เติม padding ประหยัดได้แค่เครื่องหมาย =