Base64 Enkode Dekode

Pendahuluan

Base64 adalah skema penyandian biner ke teks yang banyak digunakan dalam berbagai aplikasi, mulai dari lampiran email hingga URL data dalam pengembangan web. Skema ini memungkinkan data biner direpresentasikan dalam format string ASCII, sehingga lebih mudah untuk dikirimkan melalui media yang dirancang untuk menangani teks. Dalam artikel ini, kita akan membahas secara mendalam tentang apa itu Base64, cara kerjanya, dan cara menerapkan penyandian dan dekodean dalam proyek kamu.

Apa itu Base64??

Base64 adalah sekelompok skema penyandian biner ke teks yang merepresentasikan data biner dalam format string ASCII dengan menerjemahkannya ke dalam representasi radix-64. Istilah "Base64" berasal dari fakta bahwa ia menggunakan 64 karakter berbeda untuk mengodekan data:

  • 26 huruf kapital (A-Z)
  • 26 huruf kecil (a-z)
  • 10 digit (0-9)
  • Dua karakter tambahan: + dan /

Secara opsional, karakter pengisi (=) digunakan untuk memastikan panjang string yang dikodekan adalah kelipatan 4.

Mengapa Menggunakan Base64??

Pengodean Base64 umumnya digunakan dalam skenario di mana data biner perlu dikirimkan melalui media yang dirancang untuk menangani teks. Beberapa kasus penggunaan umum meliputi:

  • Lampiran Email: Protokol email seperti SMTP awalnya dirancang untuk menangani teks ASCII 7-bit. Pengodean Base64 memungkinkan file biner (seperti gambar atau dokumen) dikirim sebagai bagian dari email.
  • URL Data: Dalam pengembangan web, Base64 sering digunakan untuk menyematkan gambar atau data biner lainnya langsung ke dalam file HTML atau CSS.
  • API dan Token Web: Base64 digunakan dalam Token Web JSON (JWT) dan format data terkait API lainnya untuk mengodekan data biner atau data mirip biner (misalnya, kunci kriptografi).

Cara Kerja Pengodean Base64

Pengodean Base64 bekerja dengan membagi data biner input menjadi potongan 6-bit dan memetakan setiap potongan ke karakter Base64 yang sesuai. Berikut adalah uraian proses langkah demi langkah:

  1. Membagi Input: Data biner input dibagi menjadi kelompok 24-bit (3 byte). Jika panjang input bukan kelipatan 3, padding ditambahkan.
  2. Mengubah ke Potongan 6-bit: Setiap kelompok 24-bit dibagi lagi menjadi empat potongan 6-bit.
  3. Petakan ke Karakter Base64: Setiap potongan 6-bit dipetakan ke karakter Base64 yang sesuai menggunakan tabel indeks Base64.
  4. Tambahkan Padding: Jika panjang input bukan kelipatan 3, karakter padding (=) ditambahkan ke output untuk membuat panjangnya menjadi kelipatan 4.

Berikut ini contoh pengodean string "Halo" ke Base64:

Input:  H    e    l    l    o
ASCII: 72  101  108  108  111
Binary: 01001000 01100101 01101100 01101100 01101111

Grouped into 24-bit chunks:
01001000 01100101 01101100 | 01101100 01101111

Converted to 6-bit chunks:
010010 000110 010101 101100 | 011011 000110 111100

Mapped to Base64 characters:
S   G   V   s | b   G  8

Final Base64 string (with padding):
SGVsbG8=

Cara Kerja Dekoding Base64

Dekoding Base64 pada dasarnya adalah proses kebalikan dari pengodean. Begini cara kerjanya:

  1. Hapus Padding: Jika string Base64 memiliki karakter padding (=), hapus karakter tersebut.
  2. Petakan ke Chunk 6-bit: Setiap karakter Base64 dipetakan kembali ke nilai biner 6-bit yang sesuai menggunakan tabel indeks Base64.
  3. Ubah ke Byte 8-bit: Chunk 6-bit digabungkan menjadi grup 24-bit, yang kemudian dibagi menjadi tiga byte 8-bit.
  4. Rekonstruksi Data Asli: Byte digabungkan untuk merekonstruksi data biner asli.

Berikut ini contoh decoding string Base64 "SGVsbG8=" kembali ke string asli:

Input Base64 string: SGVsbG8=

Remove padding:
SGVsbG8

Map to 6-bit chunks:
S   G   V   s   b   G   8
18  6  21  46  27  6   60

Convert to binary:
010010 000110 010101 101100 011011 000110 111100

Group into 24-bit chunks:
01001000 01100101 01101100 | 01101100 01101111

Convert to ASCII:
72  101  108  108  111

Reconstruct the original string:
H    e    l    l    o

Menerapkan Base64 dalam Kode

Sebagian besar bahasa pemrograman menyediakan dukungan bawaan untuk penyandian dan dekode Base64. Berikut ini adalah contoh dalam Python, JavaScript, Java, dan Go:

Contoh Python

import base64

# Encoding
original_data = "Hello"
encoded_data = base64.b64encode(original_data.encode('utf-8')).decode('utf-8')
print(f"Encoded: {encoded_data}")  # Output: SGVsbG8=

# Decoding
decoded_data = base64.b64decode(encoded_data).decode('utf-8')
print(f"Decoded: {decoded_data}")  # Output: Hello

Contoh JavaScript

// Encoding
let originalData = "Hello";
let encodedData = btoa(originalData);
console.log(`Encoded: ${encodedData}`);  // Output: SGVsbG8=

// Decoding
let decodedData = atob(encodedData);
console.log(`Decoded: ${decodedData}`);  // Output: Hello

Contoh Java

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        // Encoding
        String originalData = "Hello";
        String encodedData = Base64.getEncoder().encodeToString(originalData.getBytes());
        System.out.println("Encoded: " + encodedData);  // Output: SGVsbG8=

        // Decoding
        byte[] decodedBytes = Base64.getDecoder().decode(encodedData);
        String decodedData = new String(decodedBytes);
        System.out.println("Decoded: " + decodedData);  // Output: Hello
    }
}

Contoh Go (Golang)

package main

import (
    "encoding/base64"
    "fmt"
)

func main() {
    // Encoding
    originalData := "Hello"
    encodedData := base64.StdEncoding.EncodeToString([]byte(originalData))
    fmt.Println("Encoded:", encodedData)  // Output: SGVsbG8=

    // Decoding
    decodedBytes, err := base64.StdEncoding.DecodeString(encodedData)
    if err != nil {
        fmt.Println("Error decoding:", err)
        return
    }
    decodedData := string(decodedBytes)
    fmt.Println("Decoded:", decodedData)  // Output: Hello
}

Kesimpulan

Pengodean dan dekode Base64 merupakan alat penting dalam perangkat seorang insinyur perangkat lunak, terutama saat menangani data biner dalam lingkungan berbasis teks. Meskipun mungkin tampak rumit pada awalnya, memahami proses yang mendasarinya dapat membantu kamu menggunakannya secara lebih efektif dalam proyek kamu. Baik kamu bekerja dengan lampiran email, URL data, atau API, Base64 merupakan skema pengodean yang kamul dan didukung secara luas.