Whiz Tools

Base64 Kódoló/Decódoló

Szöveg konvertálása Base64 kódolásra és vissza

Másolás

Base64 Kódoló és Dekódoló

Bevezetés

A Base64 egy bináris-to-text kódolási séma, amely a bináris adatokat ASCII karakterlánc formátumban képviseli. Azért lett kifejlesztve, hogy a bináris formátumban tárolt adatokat olyan csatornákon keresztül továbbítsa, amelyek csak megbízhatóan támogatják a szöveges tartalmat. A Base64 kódolás a bináris adatokat 64 karakterből álló készletté alakítja (innen a név), amely biztonságosan továbbítható szöveges protokollokon anélkül, hogy az adatok megsérülnének.

A Base64 karakterkészlete a következőkből áll:

  • Nagybetűs betűk A-Z (26 karakter)
  • Kisbetűs betűk a-z (26 karakter)
  • Számok 0-9 (10 karakter)
  • Két további karakter, jellemzően "+" és "/" (2 karakter)

Ez az eszköz lehetővé teszi, hogy könnyedén kódoljunk szöveget Base64 formátumba, vagy dekódoljunk Base64 karakterláncokat az eredeti szövegre. Különösen hasznos fejlesztők, IT szakemberek és bárki számára, aki olyan adatokkal dolgozik, amelyeket biztonságosan kell továbbítani szöveges csatornákon.

Hogyan működik a Base64 kódolás

Kódolási folyamat

A Base64 kódolás úgy működik, hogy a bináris adatok három bájt (24 bit) csoportját négy Base64 karakterré alakítja. A folyamat a következő lépéseket követi:

  1. A bemeneti szöveget bináris reprezentációra (ASCII vagy UTF-8 kódolás használatával) alakítjuk.
  2. A bináris adatokat 24 bites csoportokba (3 bájt) csoportosítjuk.
  3. Minden 24 bites csoportot négy 6 bites csoportba osztunk.
  4. Minden 6 bites csoportot a megfelelő Base64 karakterré alakítunk.

Amikor a bemenet hossza nem osztható 3-mal, "=" karakterekkel pótoljuk a 4:3 arány fenntartása érdekében.

Matematikai reprezentáció

Egy bájtokból álló b1,b2,b3b_1, b_2, b_3 sorozat esetén a megfelelő Base64 karakterek c1,c2,c3,c4c_1, c_2, c_3, c_4 a következőképpen számíthatók ki:

c1=Base64[(b1>>2)]c_1 = \text{Base64}[(b_1 >> 2)]
c2=Base64[((b1&3)<<4)(b2>>4)]c_2 = \text{Base64}[((b_1 \& 3) << 4) | (b_2 >> 4)]
c3=Base64[((b2&15)<<2)(b3>>6)]c_3 = \text{Base64}[((b_2 \& 15) << 2) | (b_3 >> 6)]
c4=Base64[(b3&63)]c_4 = \text{Base64}[(b_3 \& 63)]

Ahol Base64[i]\text{Base64}[i] a Base64 ábécé ii-edik karakterét jelenti.

Dekódolási folyamat

A Base64 dekódolás visszafordítja a kódolási folyamatot:

  1. Minden Base64 karaktert a 6 bites értékére alakítunk.
  2. Ezeket a 6 bites értékeket összefűzzük.
  3. A biteket 8 bites csoportokba (bájtokba) csoportosítjuk.
  4. Minden bájt a megfelelő karakterré alakul.

Pótlás

Amikor a kódolandó bájtok száma nem osztható 3-mal, pótlás történik:

  • Ha egy bájt marad, akkor két Base64 karakterré alakítják, amelyet "==" követ.
  • Ha két bájt marad, akkor három Base64 karakterré alakítják, amelyet "=" követ.

Példa

Kódoljuk a "Hello" szöveget Base64 formátumba:

  1. A "Hello" ASCII reprezentációja: 72 101 108 108 111
  2. Bináris reprezentáció: 01001000 01100101 01101100 01101100 01101111
  3. Csoportosítás 6 bites darabokra: 010010 000110 010101 101100 011011 000110 1111
  4. Az utolsó darab csak 4 bitet tartalmaz, ezért nullákkal pótoljuk: 010010 000110 010101 101100 011011 000110 111100
  5. Átalakítás tizedes számrendszerbe: 18, 6, 21, 44, 27, 6, 60
  6. Keresés a Base64 ábécében: S, G, V, s, b, G, 8
  7. Az eredmény "SGVsbG8="

Figyeljük meg az "=" pótlást a végén, mivel a bemenet hossza (5 bájt) nem osztható 3-mal.

Képlet

A Base64 kódolt karakterlánc hosszának kiszámítására szolgáló általános képlet:

encoded_length=4×input_length3\text{encoded\_length} = 4 \times \lceil \frac{\text{input\_length}}{3} \rceil

Ahol x\lceil x \rceil a felfelé kerekítési függvényt jelenti (a legközelebbi egész számra kerekítve).

Felhasználási esetek

A Base64 kódolás széles körben használatos különböző alkalmazásokban:

  1. E-mail Mellékletek: A MIME (Multipurpose Internet Mail Extensions) Base64-et használ a bináris mellékletek kódolására az e-mailekben.

  2. Adat URL-ek: Kicsi képek, betűtípusok vagy egyéb erőforrások közvetlen beágyazása HTML-be, CSS-be vagy JavaScript-be a data: URL séma használatával.

  3. API Kommunikációk: Bináris adatok biztonságos továbbítása JSON payload-okban vagy más szöveges API formátumokban.

  4. Bináris Adatok Tárolása Szöveges Formátumokban: Amikor bináris adatokat kell tárolni XML-ben, JSON-ban vagy más szöveges formátumokban.

  5. Hitelesítési Rendszerek: A HTTP alapú hitelesítés Base64 kódolást használ (bár nem biztonság, csak kódolás céljából).

  6. Kriptográfia: Különböző kriptográfiai protokollokban és rendszerekben, gyakran kulcsok vagy tanúsítványok kódolásához.

  7. Cookie Értékek: Összetett adatstruktúrák kódolása, amelyeket cookie-kban tárolnak.

Alternatívák

Bár a Base64 széles körben használatos, vannak alternatívák, amelyek bizonyos helyzetekben megfelelőbbek lehetnek:

  1. URL-biztos Base64: Egy változat, amely a "+" és "/" helyett "-" és "_" karaktereket használ az URL kódolási problémák elkerülésére. Hasznos olyan adatok esetén, amelyeket URL-ekben fognak használni.

  2. Base32: 32 karakteres készletet használ, ami hosszabb kimenetet eredményez, de jobb emberi olvashatóságot és kisbetű-érzéketlenséget biztosít.

  3. Hex Kódolás: Egyszerű átalakítás hexadecimálissá, amely kevésbé hatékony (megduplázza a méretet), de nagyon egyszerű és széles körben támogatott.

  4. Bináris Átvitel: Nagy fájlok esetén vagy amikor a hatékonyság kulcsfontosságú, a közvetlen bináris átvitel protokollok, mint például a HTTP megfelelő tartalom-típus fejléc mellett, előnyösebbek.

  5. Tömörítés + Base64: Nagy szöveges adatok esetén a kódolás előtt végzett tömörítés csökkentheti a méret növekedését.

  6. JSON/XML Sorosítás: Strukturált adatok esetén a natív JSON vagy XML sorosítás használata megfelelőbb lehet, mint a Base64 kódolás.

Történelem

A Base64 kódolás gyökerei a korai számítástechnikában és telekommunikációs rendszerekben találhatók, ahol a bináris adatokat szöveges csatornákon kellett továbbítani.

A Base64 hivatalos specifikációját először 1987-ben tették közzé az RFC 989 keretein belül, amely a Privacy Enhanced Mail (PEM) definícióját tartalmazta. Ezt később frissítették az RFC 1421 (1993) és az RFC 2045 (1996, MIME részeként) dokumentumokban.

A "Base64" kifejezés onnan származik, hogy a kódolás 64 különböző ASCII karaktert használ a bináris adatok reprezentálására. Ez a 64 karakteres választás szándékos volt, mivel a 64 egy hatvány (2^6), ami hatékonyá teszi a bináris és Base64 közötti átalakítást.

Idővel számos Base64 változat alakult ki:

  • Standard Base64: Az RFC 4648 szerint definiált, amely az A-Z, a-z, 0-9, +, / és = karaktereket használja a pótláshoz.
  • URL-biztos Base64: A "+" és "/" helyett - és _ karaktereket használ az URL kódolási problémák elkerülésére.
  • Fájlnév-biztos Base64: Hasonló az URL-biztoshoz, fájlnevekben való használatra tervezett.
  • IMAP-hoz módosított Base64: Az IMAP protokollban használt, eltérő speciális karakterekkel.

Bár több mint három évtizedes múltra tekint vissza, a Base64 továbbra is alapvető eszköz a modern számítástechnikában, különösen a webalkalmazások és API-k terjedésével, amelyek nagymértékben támaszkodnak a JSON-hoz hasonló szöveges adatformátumokra.

Kód Példák

Itt vannak a Base64 kódolás és dekódolás példái különböző programozási nyelveken:

// JavaScript Base64 Kódolás/Dekódolás
function encodeToBase64(text) {
  return btoa(text);
}

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("Érvénytelen Base64 karakterlánc");
  }
}

// Példa használat
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("Kódolt:", encoded);  // SGVsbG8sIFdvcmxkIQ==

try {
  const decoded = decodeFromBase64(encoded);
  console.log("Dekódolt:", decoded);  // Hello, World!
} catch (error) {
  console.error(error.message);
}
# Python Base64 Kódolás/Dekódolás
import base64

def encode_to_base64(text):
    # Szöveg bájtokká konvertálása, majd kódolás
    text_bytes = text.encode('utf-8')
    base64_bytes = base64.b64encode(text_bytes)
    return base64_bytes.decode('utf-8')

def decode_from_base64(base64_string):
    try:
        # Base64 karakterlánc bájtokká konvertálása, majd dekódolás
        base64_bytes = base64_string.encode('utf-8')
        text_bytes = base64.b64decode(base64_bytes)
        return text_bytes.decode('utf-8')
    except Exception as e:
        raise ValueError(f"Érvénytelen Base64 karakterlánc: {e}")

# Példa használat
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
print(f"Kódolt: {encoded}")  # SGVsbG8sIFdvcmxkIQ==

try:
    decoded = decode_from_base64(encoded)
    print(f"Dekódolt: {decoded}")  # Hello, World!
except ValueError as e:
    print(e)
// Java Base64 Kódolás/Dekódolás
import java.util.Base64;
import java.nio.charset.StandardCharsets;

public class Base64Example {
    public static String encodeToBase64(String text) {
        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
        byte[] encodedBytes = Base64.getEncoder().encode(textBytes);
        return new String(encodedBytes, StandardCharsets.UTF_8);
    }
    
    public static String decodeFromBase64(String base64String) {
        try {
            byte[] base64Bytes = base64String.getBytes(StandardCharsets.UTF_8);
            byte[] decodedBytes = Base64.getDecoder().decode(base64Bytes);
            return new String(decodedBytes, StandardCharsets.UTF_8);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("Érvénytelen Base64 karakterlánc: " + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        String originalText = "Hello, World!";
        String encoded = encodeToBase64(originalText);
        System.out.println("Kódolt: " + encoded);  // SGVsbG8sIFdvcmxkIQ==
        
        try {
            String decoded = decodeFromBase64(encoded);
            System.out.println("Dekódolt: " + decoded);  // Hello, World!
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}
<?php
// PHP Base64 Kódolás/Dekódolás
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("Érvénytelen Base64 karakterlánc");
    }
    return $decoded;
}

// Példa használat
$originalText = "Hello, World!";
$encoded = encodeToBase64($originalText);
echo "Kódolt: " . $encoded . "\n";  // SGVsbG8sIFdvcmxkIQ==

try {
    $decoded = decodeFromBase64($encoded);
    echo "Dekódolt: " . $decoded . "\n";  // Hello, World!
} catch (Exception $e) {
    echo "Hiba: " . $e->getMessage() . "\n";
}
?>
// C# Base64 Kódolás/Dekódolás
using System;
using System.Text;

class Base64Example
{
    public static string EncodeToBase64(string text)
    {
        byte[] textBytes = Encoding.UTF8.GetBytes(text);
        return Convert.ToBase64String(textBytes);
    }
    
    public static string DecodeFromBase64(string base64String)
    {
        try
        {
            byte[] base64Bytes = Convert.FromBase64String(base64String);
            return Encoding.UTF8.GetString(base64Bytes);
        }
        catch (FormatException)
        {
            throw new FormatException("Érvénytelen Base64 karakterlánc");
        }
    }
    
    static void Main()
    {
        string originalText = "Hello, World!";
        string encoded = EncodeToBase64(originalText);
        Console.WriteLine($"Kódolt: {encoded}");  // SGVsbG8sIFdvcmxkIQ==
        
        try
        {
            string decoded = DecodeFromBase64(encoded);
            Console.WriteLine($"Dekódolt: {decoded}");  // Hello, World!
        }
        catch (FormatException e)
        {
            Console.WriteLine($"Hiba: {e.Message}");
        }
    }
}
# Ruby Base64 Kódolás/Dekódolás
require 'base64'

def encode_to_base64(text)
  Base64.strict_encode64(text)
end

def decode_from_base64(base64_string)
  begin
    Base64.strict_decode64(base64_string)
  rescue ArgumentError => e
    raise "Érvénytelen Base64 karakterlánc: #{e.message}"
  end
end

# Példa használat
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
puts "Kódolt: #{encoded}"  # SGVsbG8sIFdvcmxkIQ==

begin
  decoded = decode_from_base64(encoded)
  puts "Dekódolt: #{decoded}"  # Hello, World!
rescue StandardError => e
  puts "Hiba: #{e.message}"
end
// Go Base64 Kódolás/Dekódolás
package main

import (
    "encoding/base64"
    "fmt"
)

func encodeToBase64(text string) string {
    return base64.StdEncoding.EncodeToString([]byte(text))
}

func decodeFromBase64(base64String string) (string, error) {
    bytes, err := base64.StdEncoding.DecodeString(base64String)
    if err != nil {
        return "", fmt.Errorf("érvénytelen Base64 karakterlánc: %v", err)
    }
    return string(bytes), nil
}

func main() {
    originalText := "Hello, World!"
    encoded := encodeToBase64(originalText)
    fmt.Println("Kódolt:", encoded)  // SGVsbG8sIFdvcmxkIQ==
    
    decoded, err := decodeFromBase64(encoded)
    if err != nil {
        fmt.Println("Hiba:", err)
    } else {
        fmt.Println("Dekódolt:", decoded)  // Hello, World!
    }
}
// Swift Base64 Kódolás/Dekódolás
import Foundation

func encodeToBase64(_ text: String) -> String? {
    if let data = text.data(using: .utf8) {
        return data.base64EncodedString()
    }
    return nil
}

func decodeFromBase64(_ base64String: String) -> String? {
    if let data = Data(base64Encoded: base64String) {
        return String(data: data, encoding: .utf8)
    }
    return nil
}

// Példa használat
let originalText = "Hello, World!"
if let encoded = encodeToBase64(originalText) {
    print("Kódolt: \(encoded)")  // SGVsbG8sIFdvcmxkIQ==
    
    if let decoded = decodeFromBase64(encoded) {
        print("Dekódolt: \(decoded)")  // Hello, World!
    } else {
        print("Hiba: Nem sikerült dekódolni a Base64 karakterláncot")
    }
} else {
    print("Hiba: Nem sikerült kódolni a szöveget")
}
' Excel VBA Base64 Kódolás/Dekódolás
' Megjegyzés: Ez igényli a Microsoft XML, v6.0 hivatkozást
Function EncodeToBase64(text As String) As String
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.nodeTypedValue = StrConv(text, vbFromUnicode)
    
    EncodeToBase64 = xmlNode.text
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
End Function

Function DecodeFromBase64(base64String As String) As String
    On Error GoTo ErrorHandler
    
    Dim xmlObj As Object
    Set xmlObj = CreateObject("MSXML2.DOMDocument")
    
    Dim xmlNode As Object
    Set xmlNode = xmlObj.createElement("b64")
    
    xmlNode.DataType = "bin.base64"
    xmlNode.text = base64String
    
    DecodeFromBase64 = StrConv(xmlNode.nodeTypedValue, vbUnicode)
    
    Set xmlNode = Nothing
    Set xmlObj = Nothing
    Exit Function
    
ErrorHandler:
    DecodeFromBase64 = "Hiba: Érvénytelen Base64 karakterlánc"
End Function

' Használat egy munkalapon:
' =EncodeToBase64("Hello, World!")
' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
# R Base64 Kódolás/Dekódolás
# A 'base64enc' csomag szükséges
# install.packages("base64enc")
library(base64enc)

encode_to_base64 <- function(text) {
  # Szöveg nyers bájtokká konvertálása, majd kódolás
  text_raw <- charToRaw(text)
  base64_encoded <- base64encode(text_raw)
  return(rawToChar(base64_encoded))
}

decode_from_base64 <- function(base64_string) {
  tryCatch({
    # Base64 karakterlánc nyers bájtokká konvertálása, majd dekódolás
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("Érvénytelen Base64 karakterlánc:", e$message))
  })
}

# Példa használat
original_text <- "Hello, World!"
encoded <- encode_to_base64(original_text)
cat("Kódolt:", encoded, "\n")  # SGVsbG8sIFdvcmxkIQ==

tryCatch({
  decoded <- decode_from_base64(encoded)
  cat("Dekódolt:", decoded, "\n")  # Hello, World!
}, error = function(e) {
  cat("Hiba:", e$message, "\n")
})
% MATLAB Base64 Kódolás/Dekódolás
function demo_base64()
    originalText = 'Hello, World!';
    
    % Kódolás
    encoded = encode_to_base64(originalText);
    fprintf('Kódolt: %s\n', encoded);  % SGVsbG8sIFdvcmxkIQ==
    
    % Dekódolás
    try
        decoded = decode_from_base64(encoded);
        fprintf('Dekódolt: %s\n', decoded);  % Hello, World!
    catch e
        fprintf('Hiba: %s\n', e.message);
    end
end

function encoded = encode_to_base64(text)
    % Szöveg uint8 tömbbé konvertálása és kódolás
    bytes = uint8(text);
    encoded = base64encode(bytes);
end

function decoded = decode_from_base64(base64String)
    try
        % Base64 karakterlánc uint8 tömbbé dekódolása
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('Érvénytelen Base64 karakterlánc');
    end
end
// C Base64 Kódolás/Dekódolás OpenSSL használatával
#include <stdio.h>
#include <string.h>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
#include <stdint.h>

char* encode_to_base64(const char* input) {
    BIO *bio, *b64;
    BUF_MEM *bufferPtr;
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new(BIO_s_mem());
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    BIO_write(bio, input, strlen(input));
    BIO_flush(bio);
    BIO_get_mem_ptr(bio, &bufferPtr);
    
    char* result = (char*)malloc(bufferPtr->length + 1);
    memcpy(result, bufferPtr->data, bufferPtr->length);
    result[bufferPtr->length] = '\0';
    
    BIO_free_all(bio);
    
    return result;
}

char* decode_from_base64(const char* input) {
    BIO *bio, *b64;
    size_t length = strlen(input);
    char* buffer = (char*)malloc(length);
    
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new_mem_buf(input, -1);
    bio = BIO_push(b64, bio);
    
    BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
    int decoded_length = BIO_read(bio, buffer, length);
    
    if (decoded_length <= 0) {
        free(buffer);
        BIO_free_all(bio);
        return NULL; // Érvénytelen Base64 bemenet
    }
    
    buffer[decoded_length] = '\0';
    
    BIO_free_all(bio);
    
    return buffer;
}

int main() {
    const char* original_text = "Hello, World!";
    
    char* encoded = encode_to_base64(original_text);
    printf("Kódolt: %s\n", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    char* decoded = decode_from_base64(encoded);
    if (decoded) {
        printf("Dekódolt: %s\n", decoded);  // Hello, World!
        free(decoded);
    } else {
        printf("Hiba: Érvénytelen Base64 karakterlánc\n");
    }
    
    free(encoded);
    
    return 0;
}
// Rust Base64 Kódolás/Dekódolás
use base64::{encode, decode};
use std::str;

fn encode_to_base64(text: &str) -> String {
    encode(text)
}

fn decode_from_base64(base64_string: &str) -> Result<String, String> {
    match decode(base64_string) {
        Ok(bytes) => {
            match str::from_utf8(&bytes) {
                Ok(text) => Ok(text.to_string()),
                Err(e) => Err(format!("Érvénytelen UTF-8 szekvencia: {}", e))
            }
        },
        Err(e) => Err(format!("Érvénytelen Base64 karakterlánc: {}", e))
    }
}

fn main() {
    let original_text = "Hello, World!";
    let encoded = encode_to_base64(original_text);
    println!("Kódolt: {}", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    match decode_from_base64(&encoded) {
        Ok(decoded) => println!("Dekódolt: {}", decoded),  // Hello, World!
        Err(e) => println!("Hiba: {}", e)
    }
}

Szélsőséges Esetek és Megfontolások

A Base64 kódolás és dekódolás során vegyük figyelembe ezeket a fontos megfontolásokat:

  1. Unicode és Nem-ASCII Karakterek: Amikor nem-ASCII karaktereket tartalmazó szöveget kódolunk, győződjünk meg róla, hogy a megfelelő karakterkódolást (általában UTF-8) alkalmazzuk a Base64 kódolás előtt.

  2. Pótlás: A standard Base64 "=" karakterekkel használja a kimenet hosszának 4-es többszörösére való biztosításához. Egyes megvalósítások lehetővé teszik a pótlás kihagyását, ami kompatibilitási problémákhoz vezethet.

  3. Sorvágások: A hagyományos Base64 megvalósítások sorvágásokat (általában 76 karakterenként) illesztenek a könnyebb olvashatóság érdekében, de a modern alkalmazások gyakran kihagyják ezeket.

  4. URL-biztos Base64: A standard Base64 a "+" és "/" karaktereket használja, amelyeknek különleges jelentése van az URL-ekben. URL kontextusokban használjon URL-biztos Base64-t, amely ezeket "-" és "_" karakterekkel helyettesíti.

  5. Fehér tér: Dekódoláskor egyes megvalósítások engedékenyek és figyelmen kívül hagyják a fehér teret, míg mások pontos bemenetet igényelnek.

  6. Méret Növekedés: A Base64 kódolás körülbelül 33%-kal növeli az adatok méretét (4 kimeneti bájt 3 bemeneti bájtért).

  7. Teljesítmény: A Base64 kódolás/dekódolás nagyon nagy adatok esetén számításigényes lehet. Nagy fájlok esetén érdemes áramlási megközelítéseket alkalmazni.

Hivatkozások

  1. RFC 4648 - A Base16, Base32 és Base64 Adat Kódolások
  2. RFC 2045 - MIME Első Rész: Internet Üzenet Testeinek Formátuma
  3. MDN Web Docs: Base64 kódolás és dekódolás
  4. Base64 - Wikipédia
  5. MIME - Wikipédia
Feedback