Pengkode dan Pengurai Base64: Ubah Teks ke/dari Base64
Alat online gratis untuk mengkode teks ke Base64 atau mengurai string Base64 kembali ke teks. Mendukung pengkodean Base64 standar dan aman-URL dengan konversi instan.
Pengkode/Pengurai Base64
Mengonversi teks ke dan dari pengkodean Base64
Dokumentasi
Encoder dan Dekoder Base64
Pendahuluan
Base64 adalah skema pengkodean biner-ke-teks yang mewakili data biner dalam format string ASCII. Ini dirancang untuk membawa data yang disimpan dalam format biner melalui saluran yang hanya mendukung konten teks dengan andal. Pengkodean Base64 mengonversi data biner menjadi satu set 64 karakter (itulah sebabnya namanya) yang dapat ditransmisikan dengan aman melalui protokol berbasis teks tanpa kerusakan data.
Set karakter Base64 terdiri dari:
- Huruf kapital A-Z (26 karakter)
- Huruf kecil a-z (26 karakter)
- Digit 0-9 (10 karakter)
- Dua karakter tambahan, biasanya "+" dan "/" (2 karakter)
Alat ini memungkinkan Anda untuk dengan mudah mengkodekan teks ke format Base64 atau mendekode string Base64 kembali ke teks aslinya. Ini sangat berguna bagi pengembang, profesional TI, dan siapa saja yang bekerja dengan data yang perlu ditransmisikan dengan aman melalui saluran berbasis teks.
Cara Kerja Pengkodean Base64
Proses Pengkodean
Pengkodean Base64 bekerja dengan mengonversi setiap kelompok tiga byte (24 bit) data biner menjadi empat karakter Base64. Prosesnya mengikuti langkah-langkah ini:
- Konversi teks input ke representasi biner (menggunakan pengkodean ASCII atau UTF-8)
- Kelompokkan data biner menjadi potongan 24 bit (3 byte)
- Pisahkan setiap potongan 24-bit menjadi empat kelompok 6-bit
- Konversi setiap kelompok 6-bit menjadi karakter Base64 yang sesuai
Ketika panjang input tidak dapat dibagi dengan 3, padding dengan karakter "=" ditambahkan untuk mempertahankan rasio 4:3 dari panjang output ke input.
Representasi Matematis
Untuk urutan byte , karakter Base64 yang sesuai dihitung sebagai:
Di mana mewakili karakter ke- dalam alfabet Base64.
Proses Dekoding
Dekoding Base64 membalikkan proses pengkodean:
- Konversi setiap karakter Base64 ke nilai 6-bitnya
- Gabungkan nilai 6-bit ini
- Kelompokkan bit menjadi potongan 8-bit (byte)
- Konversi setiap byte ke karakter yang sesuai
Padding
Ketika jumlah byte yang akan dikodekan tidak dapat dibagi dengan 3, padding diterapkan:
- Jika ada satu byte yang tersisa, itu dikonversi menjadi dua karakter Base64 diikuti dengan "=="
- Jika ada dua byte yang tersisa, mereka dikonversi menjadi tiga karakter Base64 diikuti dengan "="
Contoh
Mari kita encode teks "Hello" ke Base64:
- Representasi ASCII dari "Hello": 72 101 108 108 111
- Representasi biner: 01001000 01100101 01101100 01101100 01101111
- Pengelompokan menjadi potongan 6-bit: 010010 000110 010101 101100 011011 000110 1111
- Potongan terakhir hanya memiliki 4 bit, jadi kita padding dengan nol: 010010 000110 010101 101100 011011 000110 111100
- Mengonversi ke desimal: 18, 6, 21, 44, 27, 6, 60
- Mencari dalam alfabet Base64: S, G, V, s, b, G, 8
- Hasilnya adalah "SGVsbG8="
Perhatikan padding "=" di akhir karena panjang input (5 byte) tidak dapat dibagi dengan 3.
Rumus
Rumus umum untuk menghitung panjang string yang dikodekan Base64 adalah:
Di mana mewakili fungsi langit-langit (pembulatan ke atas ke bilangan bulat terdekat).
Kasus Penggunaan
Pengkodean Base64 banyak digunakan dalam berbagai aplikasi:
-
Lampiran Email: MIME (Multipurpose Internet Mail Extensions) menggunakan Base64 untuk mengkodekan lampiran biner dalam email.
-
Data URL: Menyematkan gambar kecil, font, atau sumber daya lainnya langsung dalam HTML, CSS, atau JavaScript menggunakan skema URL
data:
. -
Komunikasi API: Mengirimkan data biner dengan aman dalam payload JSON atau format API berbasis teks lainnya.
-
Menyimpan Data Biner dalam Format Teks: Ketika data biner perlu disimpan dalam XML, JSON, atau format berbasis teks lainnya.
-
Sistem Autentikasi: Autentikasi Dasar dalam HTTP menggunakan pengkodean Base64 (meskipun bukan untuk keamanan, hanya untuk pengkodean).
-
Kriptografi: Sebagai bagian dari berbagai protokol dan sistem kriptografi, sering untuk mengkodekan kunci atau sertifikat.
-
Nilai Cookie: Mengkodekan struktur data yang kompleks untuk disimpan dalam cookie.
Alternatif
Meskipun Base64 banyak digunakan, ada alternatif yang mungkin lebih sesuai dalam situasi tertentu:
-
Base64 Aman URL: Varian yang menggunakan "-" dan "_" sebagai pengganti "+" dan "/" untuk menghindari masalah pengkodean URL. Berguna untuk data yang akan disertakan dalam URL.
-
Base32: Menggunakan set 32 karakter, menghasilkan output yang lebih panjang tetapi dengan keterbacaan manusia yang lebih baik dan ketidakpekaan terhadap huruf besar/kecil.
-
Pengkodean Hex: Konversi sederhana ke heksadesimal, yang kurang efisien (menggandakan ukuran) tetapi sangat sederhana dan didukung secara luas.
-
Transfer Biner: Untuk file besar atau ketika efisiensi sangat penting, protokol transfer biner langsung seperti HTTP dengan header Content-Type yang sesuai lebih disukai.
-
Kompresi + Base64: Untuk data teks besar, mengompres sebelum mengkodekan dapat mengurangi peningkatan ukuran.
-
Serialisasi JSON/XML: Untuk data terstruktur, menggunakan serialisasi JSON atau XML asli mungkin lebih tepat daripada pengkodean Base64.
Sejarah
Pengkodean Base64 memiliki akar dalam sistem komputasi dan telekomunikasi awal di mana data biner perlu ditransmisikan melalui saluran yang dirancang untuk teks.
Spesifikasi formal Base64 pertama kali diterbitkan pada tahun 1987 sebagai bagian dari RFC 989, yang mendefinisikan Privacy Enhanced Mail (PEM). Ini kemudian diperbarui dalam RFC 1421 (1993) dan RFC 2045 (1996, sebagai bagian dari MIME).
Istilah "Base64" berasal dari fakta bahwa pengkodean menggunakan 64 karakter ASCII yang berbeda untuk mewakili data biner. Pemilihan 64 karakter ini disengaja, karena 64 adalah pangkat dua (2^6), yang membuat konversi antara biner dan Base64 efisien.
Seiring waktu, beberapa varian Base64 telah muncul:
- Base64 Standar: Seperti yang didefinisikan dalam RFC 4648, menggunakan A-Z, a-z, 0-9, +, / dan = untuk padding
- Base64 Aman URL: Menggunakan - dan _ sebagai pengganti + dan / untuk menghindari masalah pengkodean URL
- Base64 Aman Nama File: Mirip dengan Base64 Aman URL, dirancang untuk digunakan dalam nama file
- Base64 Dimodifikasi untuk IMAP: Digunakan dalam protokol IMAP dengan set karakter khusus yang berbeda
Meskipun sudah lebih dari tiga dekade, Base64 tetap menjadi alat dasar dalam komputasi modern, terutama dengan munculnya aplikasi web dan API yang sangat bergantung pada format data berbasis teks seperti JSON.
Contoh Kode
Berikut adalah contoh pengkodean dan dekoding Base64 dalam berbagai bahasa pemrograman:
1// Pengkodean/Pengodekan Base64 JavaScript
2function encodeToBase64(text) {
3 return btoa(text);
4}
5
6function decodeFromBase64(base64String) {
7 try {
8 return atob(base64String);
9 } catch (e) {
10 throw new Error("String Base64 tidak valid");
11 }
12}
13
14// Contoh penggunaan
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("Terenkode:", encoded); // SGVsbG8sIFdvcmxkIQ==
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("Terdecoding:", decoded); // Hello, World!
22} catch (error) {
23 console.error(error.message);
24}
25
1# Pengkodean/Pengodekan Base64 Python
2import base64
3
4def encode_to_base64(text):
5 # Konversi string ke bytes dan kemudian encode
6 text_bytes = text.encode('utf-8')
7 base64_bytes = base64.b64encode(text_bytes)
8 return base64_bytes.decode('utf-8')
9
10def decode_from_base64(base64_string):
11 try:
12 # Konversi string base64 ke bytes dan kemudian decode
13 base64_bytes = base64_string.encode('utf-8')
14 text_bytes = base64.b64decode(base64_bytes)
15 return text_bytes.decode('utf-8')
16 except Exception as e:
17 raise ValueError(f"String Base64 tidak valid: {e}")
18
19# Contoh penggunaan
20original_text = "Hello, World!"
21encoded = encode_to_base64(original_text)
22print(f"Terenkode: {encoded}") # SGVsbG8sIFdvcmxkIQ==
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"Terdecoding: {decoded}") # Hello, World!
27except ValueError as e:
28 print(e)
29
1// Pengkodean/Pengodekan Base64 Java
2import java.util.Base64;
3import java.nio.charset.StandardCharsets;
4
5public class Base64Example {
6 public static String encodeToBase64(String text) {
7 byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
8 byte[] encodedBytes = Base64.getEncoder().encode(textBytes);
9 return new String(encodedBytes, StandardCharsets.UTF_8);
10 }
11
12 public static String decodeFromBase64(String base64String) {
13 try {
14 byte[] base64Bytes = base64String.getBytes(StandardCharsets.UTF_8);
15 byte[] decodedBytes = Base64.getDecoder().decode(base64Bytes);
16 return new String(decodedBytes, StandardCharsets.UTF_8);
17 } catch (IllegalArgumentException e) {
18 throw new IllegalArgumentException("String Base64 tidak valid: " + e.getMessage());
19 }
20 }
21
22 public static void main(String[] args) {
23 String originalText = "Hello, World!";
24 String encoded = encodeToBase64(originalText);
25 System.out.println("Terenkode: " + encoded); // SGVsbG8sIFdvcmxkIQ==
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("Terdecoding: " + decoded); // Hello, World!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// Pengkodean/Pengodekan Base64 PHP
3function encodeToBase64($text) {
4 return base64_encode($text);
5}
6
7function decodeFromBase64($base64String) {
8 $decoded = base64_decode($base64String, true);
9 if ($decoded === false) {
10 throw new Exception("String Base64 tidak valid");
11 }
12 return $decoded;
13}
14
15// Contoh penggunaan
16$originalText = "Hello, World!";
17$encoded = encodeToBase64($originalText);
18echo "Terenkode: " . $encoded . "\n"; // SGVsbG8sIFdvcmxkIQ==
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "Terdecoding: " . $decoded . "\n"; // Hello, World!
23} catch (Exception $e) {
24 echo "Kesalahan: " . $e->getMessage() . "\n";
25}
26?>
27
1// Pengkodean/Pengodekan Base64 C#
2using System;
3using System.Text;
4
5class Base64Example
6{
7 public static string EncodeToBase64(string text)
8 {
9 byte[] textBytes = Encoding.UTF8.GetBytes(text);
10 return Convert.ToBase64String(textBytes);
11 }
12
13 public static string DecodeFromBase64(string base64String)
14 {
15 try
16 {
17 byte[] base64Bytes = Convert.FromBase64String(base64String);
18 return Encoding.UTF8.GetString(base64Bytes);
19 }
20 catch (FormatException)
21 {
22 throw new FormatException("String Base64 tidak valid");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hello, World!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"Terenkode: {encoded}"); // SGVsbG8sIFdvcmxkIQ==
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"Terdecoding: {decoded}"); // Hello, World!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"Kesalahan: {e.Message}");
40 }
41 }
42}
43
1# Pengkodean/Pengodekan Base64 Ruby
2require 'base64'
3
4def encode_to_base64(text)
5 Base64.strict_encode64(text)
6end
7
8def decode_from_base64(base64_string)
9 begin
10 Base64.strict_decode64(base64_string)
11 rescue ArgumentError => e
12 raise "String Base64 tidak valid: #{e.message}"
13 end
14end
15
16# Contoh penggunaan
17original_text = "Hello, World!"
18encoded = encode_to_base64(original_text)
19puts "Terenkode: #{encoded}" # SGVsbG8sIFdvcmxkIQ==
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "Terdecoding: #{decoded}" # Hello, World!
24rescue StandardError => e
25 puts "Kesalahan: #{e.message}"
26end
27
1// Pengkodean/Pengodekan Base64 Go
2package main
3
4import (
5 "encoding/base64"
6 "fmt"
7)
8
9func encodeToBase64(text string) string {
10 return base64.StdEncoding.EncodeToString([]byte(text))
11}
12
13func decodeFromBase64(base64String string) (string, error) {
14 bytes, err := base64.StdEncoding.DecodeString(base64String)
15 if err != nil {
16 return "", fmt.Errorf("string Base64 tidak valid: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hello, World!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("Terenkode:", encoded) // SGVsbG8sIFdvcmxkIQ==
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("Kesalahan:", err)
29 } else {
30 fmt.Println("Terdecoding:", decoded) // Hello, World!
31 }
32}
33
1// Pengkodean/Pengodekan Base64 Swift
2import Foundation
3
4func encodeToBase64(_ text: String) -> String? {
5 if let data = text.data(using: .utf8) {
6 return data.base64EncodedString()
7 }
8 return nil
9}
10
11func decodeFromBase64(_ base64String: String) -> String? {
12 if let data = Data(base64Encoded: base64String) {
13 return String(data: data, encoding: .utf8)
14 }
15 return nil
16}
17
18// Contoh penggunaan
19let originalText = "Hello, World!"
20if let encoded = encodeToBase64(originalText) {
21 print("Terenkode: \(encoded)") // SGVsbG8sIFdvcmxkIQ==
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("Terdecoding: \(decoded)") // Hello, World!
25 } else {
26 print("Kesalahan: Tidak dapat mendekode string Base64")
27 }
28} else {
29 print("Kesalahan: Tidak dapat mengkodekan teks")
30}
31
1' Pengkodean/Pengodekan Base64 Excel VBA
2' Catatan: Ini memerlukan referensi ke Microsoft XML, v6.0
3Function EncodeToBase64(text As String) As String
4 Dim xmlObj As Object
5 Set xmlObj = CreateObject("MSXML2.DOMDocument")
6
7 Dim xmlNode As Object
8 Set xmlNode = xmlObj.createElement("b64")
9
10 xmlNode.DataType = "bin.base64"
11 xmlNode.nodeTypedValue = StrConv(text, vbFromUnicode)
12
13 EncodeToBase64 = xmlNode.text
14
15 Set xmlNode = Nothing
16 Set xmlObj = Nothing
17End Function
18
19Function DecodeFromBase64(base64String As String) As String
20 On Error GoTo ErrorHandler
21
22 Dim xmlObj As Object
23 Set xmlObj = CreateObject("MSXML2.DOMDocument")
24
25 Dim xmlNode As Object
26 Set xmlNode = xmlObj.createElement("b64")
27
28 xmlNode.DataType = "bin.base64"
29 xmlNode.text = base64String
30
31 DecodeFromBase64 = StrConv(xmlNode.nodeTypedValue, vbUnicode)
32
33 Set xmlNode = Nothing
34 Set xmlObj = Nothing
35 Exit Function
36
37ErrorHandler:
38 DecodeFromBase64 = "Kesalahan: String Base64 tidak valid"
39End Function
40
41' Penggunaan dalam worksheet:
42' =EncodeToBase64("Hello, World!")
43' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
44
1# Pengkodean/Pengodekan Base64 R
2# Memerlukan paket 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # Konversi teks ke byte mentah, lalu encode
8 text_raw <- charToRaw(text)
9 base64_encoded <- base64encode(text_raw)
10 return(rawToChar(base64_encoded))
11}
12
13decode_from_base64 <- function(base64_string) {
14 tryCatch({
15 # Konversi string base64 ke byte mentah, lalu decode
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("String Base64 tidak valid:", e$message))
21 })
22}
23
24# Contoh penggunaan
25original_text <- "Hello, World!"
26encoded <- encode_to_base64(original_text)
27cat("Terenkode:", encoded, "\n") # SGVsbG8sIFdvcmxkIQ==
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("Terdecoding:", decoded, "\n") # Hello, World!
32}, error = function(e) {
33 cat("Kesalahan:", e$message, "\n")
34})
35
1% Pengkodean/Pengodekan Base64 MATLAB
2function demo_base64()
3 originalText = 'Hello, World!';
4
5 % Encode
6 encoded = encode_to_base64(originalText);
7 fprintf('Terenkode: %s\n', encoded); % SGVsbG8sIFdvcmxkIQ==
8
9 % Decode
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('Terdecoding: %s\n', decoded); % Hello, World!
13 catch e
14 fprintf('Kesalahan: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % Konversi teks ke array uint8 dan encode
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % Decode string base64 ke array uint8
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('String Base64 tidak valid');
31 end
32end
33
1// Pengkodean/Pengodekan Base64 C menggunakan OpenSSL
2#include <stdio.h>
3#include <string.h>
4#include <openssl/bio.h>
5#include <openssl/evp.h>
6#include <openssl/buffer.h>
7#include <stdint.h>
8
9char* encode_to_base64(const char* input) {
10 BIO *bio, *b64;
11 BUF_MEM *bufferPtr;
12
13 b64 = BIO_new(BIO_f_base64());
14 bio = BIO_new(BIO_s_mem());
15 bio = BIO_push(b64, bio);
16
17 BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
18 BIO_write(bio, input, strlen(input));
19 BIO_flush(bio);
20 BIO_get_mem_ptr(bio, &bufferPtr);
21
22 char* result = (char*)malloc(bufferPtr->length + 1);
23 memcpy(result, bufferPtr->data, bufferPtr->length);
24 result[bufferPtr->length] = '\0';
25
26 BIO_free_all(bio);
27
28 return result;
29}
30
31char* decode_from_base64(const char* input) {
32 BIO *bio, *b64;
33 size_t length = strlen(input);
34 char* buffer = (char*)malloc(length);
35
36 b64 = BIO_new(BIO_f_base64());
37 bio = BIO_new_mem_buf(input, -1);
38 bio = BIO_push(b64, bio);
39
40 BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
41 int decoded_length = BIO_read(bio, buffer, length);
42
43 if (decoded_length <= 0) {
44 free(buffer);
45 BIO_free_all(bio);
46 return NULL; // Input Base64 tidak valid
47 }
48
49 buffer[decoded_length] = '\0';
50
51 BIO_free_all(bio);
52
53 return buffer;
54}
55
56int main() {
57 const char* original_text = "Hello, World!";
58
59 char* encoded = encode_to_base64(original_text);
60 printf("Terenkode: %s\n", encoded); // SGVsbG8sIFdvcmxkIQ==
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("Terdecoding: %s\n", decoded); // Hello, World!
65 free(decoded);
66 } else {
67 printf("Kesalahan: String Base64 tidak valid\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// Pengkodean/Pengodekan Base64 Rust
2use base64::{encode, decode};
3use std::str;
4
5fn encode_to_base64(text: &str) -> String {
6 encode(text)
7}
8
9fn decode_from_base64(base64_string: &str) -> Result<String, String> {
10 match decode(base64_string) {
11 Ok(bytes) => {
12 match str::from_utf8(&bytes) {
13 Ok(text) => Ok(text.to_string()),
14 Err(e) => Err(format!("Urutan UTF-8 tidak valid: {}", e))
15 }
16 },
17 Err(e) => Err(format!("String Base64 tidak valid: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hello, World!";
23 let encoded = encode_to_base64(original_text);
24 println!("Terenkode: {}", encoded); // SGVsbG8sIFdvcmxkIQ==
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("Terdecoding: {}", decoded), // Hello, World!
28 Err(e) => println!("Kesalahan: {}", e)
29 }
30}
31
Kasus Tepi dan Pertimbangan
Saat bekerja dengan pengkodean dan dekoding Base64, perhatikan pertimbangan penting ini:
-
Karakter Unicode dan Non-ASCII: Saat mengkodekan teks dengan karakter non-ASCII, pastikan pengkodean karakter yang tepat (biasanya UTF-8) sebelum pengkodean Base64.
-
Padding: Base64 standar menggunakan padding dengan karakter "=" untuk memastikan panjang output adalah kelipatan 4. Beberapa implementasi mengizinkan penghapusan padding, yang dapat menyebabkan masalah kompatibilitas.
-
Pemisahan Baris: Implementasi Base64 tradisional menyisipkan pemisahan baris (biasanya setiap 76 karakter) untuk keterbacaan, tetapi aplikasi modern sering mengabaikannya.
-
Base64 Aman URL: Base64 standar menggunakan karakter "+" dan "/" yang memiliki arti khusus dalam URL. Untuk konteks URL, gunakan Base64 aman URL yang mengganti ini dengan "-" dan "_".
-
Whitespace: Saat mendekode, beberapa implementasi bersifat toleran dan mengabaikan whitespace, sementara yang lain memerlukan input yang tepat.
-
Peningkatan Ukuran: Pengkodean Base64 meningkatkan ukuran data sekitar 33% (4 byte output untuk setiap 3 byte input).
-
Kinerja: Pengkodean/dekoding Base64 bisa sangat intensif secara komputasi untuk data yang sangat besar. Pertimbangkan pendekatan streaming untuk file besar.
Referensi
Umpan Balik
Klik toast umpan balik untuk mulai memberikan umpan balik tentang alat ini
Alat Terkait
Temukan lebih banyak alat yang mungkin berguna untuk alur kerja Anda