ถอดรหัส Base64

อินพุต Base64
0 อักขระ

เครื่องมือถอดรหัส Base64 ออนไลน์ฟรีที่คืนสตริง Base64 กลับเป็นข้อความต้นฉบับ รองรับหลายชุดอักขระ และเหมาะสำหรับตรวจสอบ API กับกู้คืน log

คำแนะนำที่เกี่ยวข้อง

การถอดรหัส Base64 คืออะไร?

การถอดรหัส Base64 คือกระบวนการย้อนกลับจากการเข้ารหัส Base64 โดยแปลงสตริง Base64 (เช่น SGVsbG8=) ให้กลับเป็นข้อความต้นฉบับหรือข้อมูลไบนารี Base64 เป็นวิธีการเข้ารหัสที่ใช้ตัวอักษร ASCII ที่พิมพ์ได้ 64 ตัว (A-Z, a-z, 0-9, +, /) เพื่อแทนข้อมูลไบนารี และนิยามไว้ใน RFC 4648

**การใช้งานที่พบบ่อยของการถอดรหัส:** Base64 ถูกใช้มากใน header ของ HTTP Basic Authentication, payload ของ JWT token, field ในผลลัพธ์ API, Data URI (เช่น `data:image/png;base64,...`), การเข้ารหัส MIME สำหรับไฟล์แนบอีเมล และการเก็บข้อมูล BLOB ในฐานข้อมูล การถอดรหัสสิ่งเหล่านี้เป็นงานที่พบบ่อยในการพัฒนาและดีบัก

**ขั้นตอนสำคัญในการถอดรหัส:** เมื่อถอดรหัส Base64 ต้องจัดการให้ถูกต้องกับ 1) ชุดอักขระ (UTF-8 สำหรับตัวอักษรหลายไบต์, ASCII สำหรับข้อความอังกฤษล้วน) 2) Padding (`=`) เพราะความยาวต้องเป็นพหุคูณของ 4 3) ตัวแปร URL-safe (`-` และ `_` แทน `+` และ `/`) 4) การขึ้นบรรทัดใหม่และช่องว่าง (Base64 มาตรฐานไม่มี ส่วน MIME จะขึ้นบรรทัดใหม่ทุก 76 อักขระ)

**การรองรับในเบราว์เซอร์:** เบราว์เซอร์มีฟังก์ชัน `atob()` สำหรับถอดรหัส Base64 แต่รองรับเฉพาะ Latin-1 (ISO-8859-1) เท่านั้น หากต้องการประมวลผลข้อความ UTF-8 ต้องใช้ `TextDecoder('utf-8')` ช่วยแปลงไบต์ก่อน เครื่องมือนี้จัดการรายละเอียดนั้นให้อัตโนมัติ

**ความเป็นส่วนตัวจากการประมวลผลในเครื่อง:** การถอดรหัสทั้งหมดเกิดขึ้นภายในเบราว์เซอร์ สตริง Base64 ที่คุณป้อนจะไม่ถูกส่งไปยังเซิร์ฟเวอร์ใด จึงสามารถใช้ถอดรหัส token ที่ละเอียดอ่อนใน API หรือข้อมูลผู้ใช้ใน log ได้อย่างมั่นใจ

กรณีการใช้งาน

  • ถอดรหัส field Base64 ที่ได้จาก API เพื่อดูเนื้อหาต้นฉบับ
  • กู้คืนข้อมูล Base64 ใน log
  • เรียกคืนค่า Base64 ในไฟล์คอนฟิก
  • วิเคราะห์สาเหตุของ error ตอนถอด Base64 เช่น padding หายหรือมีอักขระไม่ถูกต้อง
  • ถอดรหัส header และ payload ของ JWT เพื่อดูข้อมูลผู้ใช้
  • ถอดรหัสข้อมูลรับรอง HTTP Basic Authentication เพื่อดูชื่อผู้ใช้และรหัสผ่าน
  • กู้คืนข้อมูลรูปภาพหรือ resource จาก Data URI Scheme

วิธีการใช้งาน

  1. วางสตริง Base64 ที่ต้องการถอดรหัส
  2. เลือกชุดอักขระ (UTF-8/ASCII/ISO-8859-1)
  3. เครื่องมือจะถอดรหัส Base64 และแสดงผลให้อัตโนมัติ
  4. คัดลอกผลลัพธ์ไปใช้ต่อในการดีบักหรือบันทึกเอกสาร

คุณสมบัติ

  • แปลงแบบเรียลไทม์: ป้อนข้อมูลแล้วระบบถอดรหัสอัตโนมัติด้วย debounce 300 ms โดยไม่ต้องกดเอง
  • รองรับหลายชุดอักขระ: UTF-8, ASCII และ ISO-8859-1 สำหรับภาษาไทย อังกฤษ และหลายภาษา
  • รองรับ URL-safe Base64: จัดการการแทนที่ `-` และ `_` อัตโนมัติ รวมถึงรูปแบบที่ไม่มี padding
  • ตรวจจับอักขระไม่ถูกต้อง: หากถอดรหัสล้มเหลว จะแสดงตำแหน่งปัญหาเพื่อหาสาเหตุได้เร็ว
  • คัดลอกและดาวน์โหลดได้ในคลิกเดียว: คัดลอกผลลัพธ์ลง clipboard หรือดาวน์โหลดเป็นไฟล์ `.txt`
  • จัดการ Padding อัตโนมัติ: เติมหรือลบ `=` ให้เองโดยไม่ต้องปรับความยาวด้วยมือ
  • รองรับตัวแปร MIME: รู้จักและประมวลผล Base64 MIME ที่มีการขึ้นบรรทัดใหม่ทุก 76 อักขระ

ตัวอย่างโค้ด

JavaScript: ถอดด้วย `atob()` ในเบราว์เซอร์ (รองรับเฉพาะ Latin-1)

javascript

ใช้ API พื้นฐานของเบราว์เซอร์เพื่อถอด Base64 แบบข้อความอังกฤษทั่วไป หากเป็น UTF-8 ให้ใช้ `TextDecoder`

// Standard Base64 decode (plain English / Latin-1)
function b64Decode(str) {
  try {
    return atob(str);
  } catch (e) {
    return 'Decode failed: ' + e.message;
  }
}

console.log(b64Decode('SGVsbG8gV29ybGQ=')); // "Hello World"

// UTF-8 decode (recommended)
function b64DecodeUtf8(str) {
  const binary = atob(str);
  const bytes = new Uint8Array(binary.length);
  for (let i = 0; i < binary.length; i++) {
    bytes[i] = binary.charCodeAt(i);
  }
  return new TextDecoder('utf-8').decode(bytes);
}

console.log(b64DecodeUtf8('5LiW55WM')); // UTF-8 text

Python: ถอดด้วยไลบรารี `base64` (รวม URL-Safe)

python

ไลบรารีมาตรฐาน `base64` ของ Python รองรับทั้งโหมด Standard และ URL-Safe

import base64

# Standard decode
encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded)

# URL-Safe decode
url_encoded = 'SGVsbG8g5LiW55WM'
decoded = base64.urlsafe_b64decode(url_encoded + '=' * (4 - len(url_encoded) % 4))
print(decoded.decode('utf-8'))

# MIME decode (after removing line breaks)
mime_encoded = 'SGVs\nbG8g\nV29y\nbGQ='
decoded = base64.b64decode(mime_encoded.replace('\n', '')).decode('utf-8')
print(decoded)

# Ignore invalid characters automatically
import re
cleaned = re.sub(r'[^A-Za-z0-9+/=]', '', encoded)
decoded = base64.b64decode(cleaned).decode('utf-8')
print(decoded)

Java: ถอดด้วย `java.util.Base64` (หลายตัวแปร)

java

ไลบรารีมาตรฐานของ Java รองรับ Base64 แบบ RFC 4648, URL-Safe และ MIME อย่างครบถ้วน

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64DecodeExample {
    public static void main(String[] args) {
        String encoded = "SGVsbG8g5LiW55WM";

        // Standard decode
        byte[] decoded = Base64.getDecoder().decode(encoded);
        System.out.println(new String(decoded, StandardCharsets.UTF_8));

        // URL-Safe decode
        byte[] urlDecoded = Base64.getUrlDecoder().decode(encoded);
        System.out.println(new String(urlDecoded, StandardCharsets.UTF_8));

        // MIME decode (handles line breaks automatically)
        String mime = "SGVs\nbG8g\nV29y\nbGQ=";
        byte[] mimeDecoded = Base64.getMimeDecoder().decode(mime);
        System.out.println(new String(mimeDecoded, StandardCharsets.UTF_8));

        // Error handling
        try {
            Base64.getDecoder().decode("invalid@base64");
        } catch (IllegalArgumentException e) {
            System.err.println("Decode failed: " + e.getMessage());
        }
    }
}

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

ทำไมถึงขึ้น InvalidCharacterError ตอนถอด Base64?

สาเหตุที่พบบ่อยคือมีช่องว่าง บรรทัดใหม่ หรือเครื่องหมายคำพูดปะปนอยู่ จำนวน Padding (`=`) ไม่ถูกต้อง หรือใช้ตัวแปร URL-safe (`-/_`) แต่ถอดแบบ Base64 ปกติ ควรล้างสตริงให้สะอาดก่อน

ถ้าถอดแล้วได้ข้อความเพี้ยนควรทำอย่างไร?

เป็นไปได้ว่าคุณเลือกชุดอักขระผิด หากข้อความต้นฉบับเป็นข้อความหลายไบต์ ควรเลือก UTF-8 ส่วนข้อความอังกฤษล้วนหรือข้อมูลไบนารีอาจลอง ASCII หรือ ISO-8859-1 ได้

การถอด URL-safe Base64 ต่างจาก Base64 ปกติอย่างไร?

URL-safe Base64 ใช้ `-` และ `_` แทน `+` และ `/` และมักละ Padding `=` ท้ายสตริง ก่อนถอดรหัสจึงต้องแปลง `-/_` กลับเป็น `+/` และเติม padding ให้ครบ

การถอด Base64 เหมาะกับการดีบัก API ไหม?

เหมาะมาก เพราะผลลัพธ์ API, OAuth token, callback parameter และ middleware log จำนวนมากจะห่อข้อมูลไว้ด้วย Base64 เมื่อถอดแล้วจะเห็นข้อมูลจริงได้ทันที

จะถอด header หรือ payload ของ JWT อย่างไร?

JWT ใช้ Base64URL (ตัวแปร URL-safe) ให้วาง segment แรก (header) หรือ segment ที่สอง (payload) แล้วเลือกโหมด URL-safe ส่วน segment ที่สามเป็นลายเซ็น ไม่ควรนำมาตรวจสอบด้วยการถอดรหัสแบบธรรมดา

รองรับไฟล์ขนาดใหญ่ไหม?

ไม่มีการจำกัดขนาดแบบชัดเจน แต่เบราว์เซอร์อาจช้าลงเมื่อข้อความมีขนาดใหญ่มาก การถอดสตริง Base64 ที่เกิน 10MB อาจทำให้หน้าอืด จึงควรถอดเป็นช่วง ๆ หรือใช้สคริปต์ Node.js / Python

ถ้า padding หายไปจะเป็นอย่างไร?

เครื่องมือจะเติม Padding (`=`) ให้อัตโนมัติเพื่อให้ความยาวเป็นพหุคูณของ 4 เนื่องจากตัวแปร URL-safe มักไม่ใส่ padding เครื่องมือจึงตรวจจับและเติมให้เอง

การถอด Base64 คือการถอดรหัสลับหรือไม่?

ไม่ใช่ Base64 เป็นการเข้ารหัสแบบย้อนกลับได้ ไม่ใช่การเข้ารหัสลับ ใคร ๆ ก็ถอด Base64 ได้ หากเป็นข้อมูลสำคัญควรใช้การเข้ารหัสจริง เช่น AES

ผลลัพธ์ของ `atob()` ในเบราว์เซอร์เหมือนกับเครื่องมือนี้ไหม?

สำหรับข้อความอังกฤษล้วนมักจะเหมือนกัน แต่ `atob()` รองรับเพียง Latin-1 และไม่สามารถจัดการข้อความ UTF-8 โดยตรง เครื่องมือนี้จึงเทียบเท่ากับการใช้ `atob()` ร่วมกับ `TextDecoder`

สามารถส่งออกผลลัพธ์หลังถอดรหัสได้ไหม?

ได้ คุณสามารถคัดลอกลง clipboard ด้วยคลิกเดียว หรือดาวน์โหลดเป็นไฟล์ `.txt` ซึ่งใช้ UTF-8 และเปิดได้ด้วย text editor หรือ Excel

อภิธานศัพท์

Base64
วิธีเข้ารหัสข้อมูลไบนารีเป็นข้อความโดยใช้ตัวอักษร ASCII ที่พิมพ์ได้ 64 ตัว กำหนดไว้ใน RFC 4648 ทุก 3 ไบต์จะถูกแปลงเป็น 4 อักขระ ทำให้ขนาดเพิ่มขึ้นประมาณ 33%
atob()
ฟังก์ชันถอดรหัส Base64 แบบเนทีฟของเบราว์เซอร์ (ASCII to Binary) รองรับเฉพาะ Latin-1 หากเป็น UTF-8 ต้องใช้ร่วมกับ TextDecoder
Padding
การเติมอักขระ `=` ท้าย Base64 เพื่อให้ความยาวเป็นพหุคูณของ 4 ตอนถอดรหัสมักจัดการให้โดยอัตโนมัติ ส่วนตัวแปร URL-safe มักละ padding
URL-Safe Base64
ตัวแปรที่ปลอดภัยสำหรับ URL ตาม RFC 4648 §5 ใช้ `-` และ `_` แทน `+` และ `/` มักใช้ใน JWT และ OAuth PKCE
MIME Base64
ตัวแปร Base64 ตาม RFC 2045 ที่แทรก CRLF ทุก 76 อักขระ ใช้หลัก ๆ กับการส่งไฟล์แนบอีเมล
UTF-8
รูปแบบเข้ารหัส Unicode แบบความยาวแปรผัน หากต้องการกู้คืนข้อความหลายไบต์ให้ถูกต้อง ควรเลือก UTF-8 ตอนถอดรหัส Base64
InvalidCharacterError
ข้อผิดพลาดที่ `atob()` โยนเมื่อพบช่องว่าง การขึ้นบรรทัดใหม่ หรืออักขระที่ไม่ใช่ Base64 ในข้อมูลนำเข้า
Latin-1 (ISO-8859-1)
ชุดอักขระแบบหนึ่งไบต์สำหรับภาษาในยุโรปตะวันตก `atob` และ `btoa` ของเบราว์เซอร์รองรับชุดนี้โดยตรงเท่านั้น

เปรียบเทียบ Base64 3 ตัวแปร

ก่อนถอดรหัส ให้ระบุชนิดของ Base64 ที่รับเข้ามาและเลือกโหมดให้ถูกต้อง เพื่อหลีกเลี่ยง error หรือผลลัพธ์เพี้ยน

คุณสมบัติStandardURL-SafeMIME
อักขระพิเศษ+ /- _+ /
Padding (=)ใช้มักละไว้ใช้
การขึ้นบรรทัดใหม่ไม่มีไม่มีทุก 76 อักขระ
มาตรฐานRFC 4648 §4RFC 4648 §5RFC 2045
สถานการณ์ทั่วไปData URI, การเข้ารหัสทั่วไปJWT, พารามิเตอร์ URL, ชื่อไฟล์ไฟล์แนบอีเมล, การส่ง SMTP
ข้อควรระวังในการถอดอาจต้องเติม paddingเปลี่ยน -_ เป็น +/ ก่อนแล้วค่อยถอดลบการขึ้นบรรทัดใหม่ก่อนถอด

5 ข้อผิดพลาดที่พบบ่อยในการถอด Base64

หากถอดรหัสแล้วมี error ตารางนี้ช่วยให้หาสาเหตุได้เร็วขึ้น

ประเภทข้อผิดพลาดสาเหตุที่เป็นไปได้วิธีแก้
InvalidCharacterErrorมีช่องว่าง บรรทัดใหม่ หรืออักขระที่ไม่ใช่ Base64ล้างสตริงนำเข้าหรือใช้เครื่องมือ Base64 Clean
ข้อความเพี้ยนหลังถอดเลือกชุดอักขระผิด เช่น อ่าน UTF-8 ด้วย Latin-1สลับไปใช้ UTF-8
มี error ในพารามิเตอร์ URLถอดอักขระ URL-safe (`-_`) เหมือน Base64 มาตรฐานเปลี่ยน `-_` เป็น `+/` ก่อน
Padding ไม่ถูกต้องความยาวไม่เป็นพหุคูณของ 4เติม `=` จนกระทั่งความยาว % 4 = 0
สตริงว่างข้อมูลนำเข้ามีแต่ช่องว่างหรือขึ้นบรรทัดใหม่ลบช่องว่างแล้วป้อนใหม่

Authoritative References