Whiz Tools

Base64 kodeerija/dekodeerija

Muuda tekst Base64 kodeeringusse ja tagasi

Kopeeri

Base64 Kodeerija ja Dekodeerija

Sissejuhatus

Base64 on binaarsetest tekstiks kodeerimise skeem, mis esindab binaarandmeid ASCII stringi formaadis. See on loodud selleks, et edastada binaarsetes formaatides salvestatud andmeid kanalite kaudu, mis toetavad usaldusväärselt ainult tekstisisu. Base64 kodeerimine muundab binaarandmed 64 tähemärgi kogumiks (seetõttu ka nimi), mida saab ohutult edastada tekstipõhiste protokollide kaudu ilma andmete rikkumiseta.

Base64 tähemärgikomplekt koosneb järgmistest:

  • Suurtähed A-Z (26 tähemärki)
  • Väiketähed a-z (26 tähemärki)
  • Numbrid 0-9 (10 tähemärki)
  • Kaks täiendavat tähemärki, tavaliselt "+" ja "/" (2 tähemärki)

See tööriist võimaldab teil hõlpsasti kodeerida teksti Base64 formaati või dekodeerida Base64 stringe tagasi nende algsesse teksti. See on eriti kasulik arendajatele, IT-spetsialistidele ja kõigile, kes töötavad andmetega, mida tuleb edastada ohutult tekstipõhiste kanalite kaudu.

Kuidas Base64 Kodeerimine Töötab

Kodeerimisprotsess

Base64 kodeerimine töötab, muundades iga kolme baitide (24 bitti) rühma binaarsetest andmetest neljaks Base64 tähemärgiks. Protsess järgib järgmisi samme:

  1. Muutke sisestatud tekst oma binaarseteks esindusteks (kasutades ASCII või UTF-8 kodeeringut)
  2. Jagage binaarandmed 24 bitisteks rühmadeks (3 baiti)
  3. Jagage iga 24-bitisest rühm neljaks 6-bitiseks rühmaks
  4. Muutke iga 6-bitisest rühm vastavaks Base64 tähemärgiks

Kui sisendi pikkus ei ole jagatav 3-ga, lisatakse täiendamiseks "=" tähemärgid, et säilitada 4:3 suhe väljundi ja sisendi pikkuste vahel.

Matemaatiline Esitus

Baiti järjestuse b1,b2,b3b_1, b_2, b_3 vastavad Base64 tähemärgid c1,c2,c3,c4c_1, c_2, c_3, c_4 arvutatakse järgmiselt:

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)]

Kus Base64[i]\text{Base64}[i] esindab ii-ndat tähemärki Base64 tähestikus.

Dekodeerimisprotsess

Base64 dekodeerimine pöörab kodeerimisprotsessi tagasi:

  1. Muutke iga Base64 tähemärk oma 6-bitiseks väärtuseks
  2. Koonduge need 6-bitiseks väärtused
  3. Jagage bitid 8-bitiseks rühmadeks (baitideks)
  4. Muutke iga bait vastavaks tähemärgiks

Täiendamine

Kui kodeeritavate baitide arv ei ole jagatav 3-ga, rakendatakse täiendamist:

  • Kui jääb üks bait, muudetakse see kaheks Base64 tähemärgiks, millele järgneb "=="
  • Kui jääb kaks bait, muudetakse need kolmeks Base64 tähemärgiks, millele järgneb "="

Näide

Kodeerime teksti "Tere" Base64 formaati:

  1. "Tere" ASCII esitus: 84 101 114 101
  2. Binaarsetes esindustes: 01010100 01100101 01110010 01100101
  3. Jagamine 6-bitiseks rühmadeks: 010101 000110 010100 011001 01
  4. Viimane rühm sisaldab ainult 2 bitti, seega täiendame nullidega: 010101 000110 010100 011001 010000
  5. Muutmine kümnendsüsteemi: 21, 6, 20, 25, 0
  6. Otsimine Base64 tähestikus: V, G, U, c, A
  7. Tulemuseks on "VGVyZQ=="

Pange tähele "=" täiendust lõpus, kuna sisendi pikkus (4 baiti) ei ole jagatav 3-ga.

Valem

Base64 kodeeritud stringi pikkuse arvutamiseks on üldine valem:

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

Kus x\lceil x \rceil esindab lae funktsiooni (ümardamine üles lähima täisarvuni).

Kasutusalad

Base64 kodeerimist kasutatakse laialdaselt erinevates rakendustes:

  1. E-kirja manused: MIME (Mitmeotstarbeline Interneti-postituste laiendus) kasutab Base64 binaarsete manuste kodeerimiseks e-kirjades.

  2. Andme-URL-id: Väikeste piltide, fondide või muude ressursside otse HTML-i, CSS-i või JavaScripti sisse embedimine data: URL skeemi abil.

  3. API suhtlus: Binaarsete andmete ohutu edastamine JSON-i koormustes või muudes tekstipõhistes API formaatides.

  4. Binaarsete andmete salvestamine tekstivormingutes: Kui binaarset andmeid tuleb salvestada XML-is, JSON-is või muudes tekstipõhistes formaatides.

  5. Autentimissüsteemid: HTTP põhi autentimine kasutab Base64 kodeerimist (kuigi see ei ole turvalisuse jaoks, vaid lihtsalt kodeerimiseks).

  6. Krüptograafia: Erinevate krüptograafiliste protokollide ja süsteemide osana, sageli võtmete või sertifikaatide kodeerimiseks.

  7. Küpsiste väärtused: Kompleksete andmestruktuuride kodeerimine küpsistesse salvestamiseks.

Alternatiivid

Kuigi Base64 on laialdaselt kasutatav, on teatud olukordades sobivamad alternatiivid:

  1. URL-ohutu Base64: Variant, mis kasutab "-" ja "_" asemel "+" ja "/", et vältida URL kodeerimise probleeme. Kasulik andmete jaoks, mis sisaldavad URL-e.

  2. Base32: Kasutab 32-tähemärgi komplekti, mis toob kaasa pikema väljundi, kuid parema inimloetavuse ja suurte tähtede tundetuse.

  3. Hex kodeerimine: Lihtne konverteerimine heksadesimaalsesse, mis on vähem efektiivne (kahekordistab suurust), kuid väga lihtne ja laialdaselt toetatud.

  4. Binaarülekanne: Suurte failide või siis, kui efektiivsus on kriitiline, on otse binaarsete ülekandeprotokollide, nagu HTTP koos sobivate sisu tüüpide päistega, eelistatum.

  5. Kompresseerimine + Base64: Suurte tekstandmete puhul võib enne kodeerimist kompressioon aidata vähendada suuruse suurenemist.

  6. JSON/XML serialiseerimine: Struktureeritud andmete jaoks võib olla sobivam kasutada natiivset JSON-i või XML-i serialiseerimist kui Base64 kodeerimist.

Ajalugu

Base64 kodeerimine on oma juured varases arvutitehnoloogias ja telekommunikatsioonisüsteemides, kus binaarset andmeid tuli edastada tekstiks mõeldud kanalite kaudu.

Base64 ametlik spetsifikatsioon avaldati esmakordselt 1987. aastal RFC 989 osana, mis määratles privaatsuse parendatud posti (PEM). Seda uuendati hiljem RFC 1421 (1993) ja RFC 2045 (1996, MIME osana).

Termin "Base64" tuleneb sellest, et kodeerimine kasutab binaarsete andmete esindamiseks 64 erinevat ASCII tähemärki. See 64 tähemärgi valik oli teadlik, kuna 64 on 2 võimsus (2^6), mis muudab binaarsete ja Base64 vahelise muundamise tõhusaks.

Aja jooksul on tekkinud mitmeid Base64 variante:

  • Standardne Base64: Nagu on määratletud RFC 4648, kasutades A-Z, a-z, 0-9, +, / ja = täiendamiseks
  • URL-ohutu Base64: Kasutab - ja _ asemel + ja / URL kodeerimise probleemide vältimiseks
  • Faili-ohutu Base64: Sarnane URL-ohutule, mõeldud failinimede kasutamiseks
  • IMAP-i muudetud Base64: Kasutatakse IMAP protokollis erineva erimärgistusega

Kuigi Base64 on üle kolme aastakümne vana, jääb see kaasaegse arvutitehnoloogia põhivahendiks, eriti veebirakenduste ja API-de tõusuga, mis tuginevad tugevalt tekstipõhistele andmevormingutele nagu JSON.

Koodinäited

Siin on näited Base64 kodeerimisest ja dekodeerimisest erinevates programmeerimiskeeltes:

// JavaScript Base64 Kodeerimine/Dekodeerimine
function encodeToBase64(text) {
  return btoa(text);
}

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("Vale Base64 string");
  }
}

// Näidis kasutamine
const originalText = "Tere, Maailm!";
const encoded = encodeToBase64(originalText);
console.log("Kodeeritud:", encoded);  // VGVyZSwgTWFpbG0h

try {
  const decoded = decodeFromBase64(encoded);
  console.log("Dekodeeritud:", decoded);  // Tere, Maailm!
} catch (error) {
  console.error(error.message);
}
# Python Base64 Kodeerimine/Dekodeerimine
import base64

def encode_to_base64(text):
    # Muutke string baitideks ja seejärel kodeerige
    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:
        # Muutke Base64 string baitideks ja seejärel dekodeerige
        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"Vale Base64 string: {e}")

# Näidis kasutamine
original_text = "Tere, Maailm!"
encoded = encode_to_base64(original_text)
print(f"Kodeeritud: {encoded}")  # VGVyZSwgTWFpbG0h

try:
    decoded = decode_from_base64(encoded)
    print(f"Dekodeeritud: {decoded}")  # Tere, Maailm!
except ValueError as e:
    print(e)
// Java Base64 Kodeerimine/Dekodeerimine
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("Vale Base64 string: " + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        String originalText = "Tere, Maailm!";
        String encoded = encodeToBase64(originalText);
        System.out.println("Kodeeritud: " + encoded);  // VGVyZSwgTWFpbG0h
        
        try {
            String decoded = decodeFromBase64(encoded);
            System.out.println("Dekodeeritud: " + decoded);  // Tere, Maailm!
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}
<?php
// PHP Base64 Kodeerimine/Dekodeerimine
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("Vale Base64 string");
    }
    return $decoded;
}

// Näidis kasutamine
$originalText = "Tere, Maailm!";
$encoded = encodeToBase64($originalText);
echo "Kodeeritud: " . $encoded . "\n";  // VGVyZSwgTWFpbG0h

try {
    $decoded = decodeFromBase64($encoded);
    echo "Dekodeeritud: " . $decoded . "\n";  // Tere, Maailm!
} catch (Exception $e) {
    echo "Viga: " . $e->getMessage() . "\n";
}
?>
// C# Base64 Kodeerimine/Dekodeerimine
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("Vale Base64 string");
        }
    }
    
    static void Main()
    {
        string originalText = "Tere, Maailm!";
        string encoded = EncodeToBase64(originalText);
        Console.WriteLine($"Kodeeritud: {encoded}");  // VGVyZSwgTWFpbG0h
        
        try
        {
            string decoded = DecodeFromBase64(encoded);
            Console.WriteLine($"Dekodeeritud: {decoded}");  // Tere, Maailm!
        }
        catch (FormatException e)
        {
            Console.WriteLine($"Viga: {e.Message}");
        }
    }
}
# Ruby Base64 Kodeerimine/Dekodeerimine
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 "Vale Base64 string: #{e.message}"
  end
end

# Näidis kasutamine
original_text = "Tere, Maailm!"
encoded = encode_to_base64(original_text)
puts "Kodeeritud: #{encoded}"  # VGVyZSwgTWFpbG0h

begin
  decoded = decode_from_base64(encoded)
  puts "Dekodeeritud: #{decoded}"  # Tere, Maailm!
rescue StandardError => e
  puts "Viga: #{e.message}"
end
// Go Base64 Kodeerimine/Dekodeerimine
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("vale Base64 string: %v", err)
    }
    return string(bytes), nil
}

func main() {
    originalText := "Tere, Maailm!"
    encoded := encodeToBase64(originalText)
    fmt.Println("Kodeeritud:", encoded)  // VGVyZSwgTWFpbG0h
    
    decoded, err := decodeFromBase64(encoded)
    if err != nil {
        fmt.Println("Viga:", err)
    } else {
        fmt.Println("Dekodeeritud:", decoded)  // Tere, Maailm!
    }
}
// Swift Base64 Kodeerimine/Dekodeerimine
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
}

// Näidis kasutamine
let originalText = "Tere, Maailm!"
if let encoded = encodeToBase64(originalText) {
    print("Kodeeritud: \(encoded)")  // VGVyZSwgTWFpbG0h
    
    if let decoded = decodeFromBase64(encoded) {
        print("Dekodeeritud: \(decoded)")  // Tere, Maailm!
    } else {
        print("Viga: Ei suutnud dekodeerida Base64 stringi")
    }
} else {
    print("Viga: Ei suutnud kodeerida teksti")
}
' Excel VBA Base64 Kodeerimine/Dekodeerimine
' Märkus: See vajab viidet Microsoft XML, v6.0
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 = "Viga: Vale Base64 string"
End Function

' Kasutamine töölehe sees:
' =EncodeToBase64("Tere, Maailm!")
' =DecodeFromBase64("VGVyZSwgTWFpbG0h")
# R Base64 Kodeerimine/Dekodeerimine
# Nõuab 'base64enc' paketti
# install.packages("base64enc")
library(base64enc)

encode_to_base64 <- function(text) {
  # Muutke tekst toorandmeteks, seejärel kodeerige
  text_raw <- charToRaw(text)
  base64_encoded <- base64encode(text_raw)
  return(rawToChar(base64_encoded))
}

decode_from_base64 <- function(base64_string) {
  tryCatch({
    # Muutke base64 string toorandmeteks, seejärel dekodeerige
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("Vale Base64 string:", e$message))
  })
}

# Näidis kasutamine
original_text <- "Tere, Maailm!"
encoded <- encode_to_base64(original_text)
cat("Kodeeritud:", encoded, "\n")  # VGVyZSwgTWFpbG0h

tryCatch({
  decoded <- decode_from_base64(encoded)
  cat("Dekodeeritud:", decoded, "\n")  # Tere, Maailm!
}, error = function(e) {
  cat("Viga:", e$message, "\n")
})
% MATLAB Base64 Kodeerimine/Dekodeerimine
function demo_base64()
    originalText = 'Tere, Maailm!';
    
    % Kodeerimine
    encoded = encode_to_base64(originalText);
    fprintf('Kodeeritud: %s\n', encoded);  % VGVyZSwgTWFpbG0h
    
    % Dekodeerimine
    try
        decoded = decode_from_base64(encoded);
        fprintf('Dekodeeritud: %s\n', decoded);  % Tere, Maailm!
    catch e
        fprintf('Viga: %s\n', e.message);
    end
end

function encoded = encode_to_base64(text)
    % Muutke tekst uint8 massiiviks ja kodeerige
    bytes = uint8(text);
    encoded = base64encode(bytes);
end

function decoded = decode_from_base64(base64String)
    try
        % Dekodeerige base64 string uint8 massiiviks
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('Vale Base64 string');
    end
end
// C Base64 Kodeerimine/Dekodeerimine kasutades OpenSSL
#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; // Vale Base64 sisend
    }
    
    buffer[decoded_length] = '\0';
    
    BIO_free_all(bio);
    
    return buffer;
}

int main() {
    const char* original_text = "Tere, Maailm!";
    
    char* encoded = encode_to_base64(original_text);
    printf("Kodeeritud: %s\n", encoded);  // VGVyZSwgTWFpbG0h
    
    char* decoded = decode_from_base64(encoded);
    if (decoded) {
        printf("Dekodeeritud: %s\n", decoded);  // Tere, Maailm!
        free(decoded);
    } else {
        printf("Viga: Vale Base64 string\n");
    }
    
    free(encoded);
    
    return 0;
}
// Rust Base64 Kodeerimine/Dekodeerimine
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!("Vale UTF-8 järjestus: {}", e))
            }
        },
        Err(e) => Err(format!("Vale Base64 string: {}", e))
    }
}

fn main() {
    let original_text = "Tere, Maailm!";
    let encoded = encode_to_base64(original_text);
    println!("Kodeeritud: {}", encoded);  // VGVyZSwgTWFpbG0h
    
    match decode_from_base64(&encoded) {
        Ok(decoded) => println!("Dekodeeritud: {}", decoded),  // Tere, Maailm!
        Err(e) => println!("Viga: {}", e)
    }
}

Äärmuslikud Juhud ja Arvestused

Base64 kodeerimise ja dekodeerimisega töötamisel olge teadlikud järgmistest olulistest kaalutlustest:

  1. Unicode ja mitte-ASCII tähemärgid: Kui kodeerite teksti, mis sisaldab mitte-ASCII tähemärke, veenduge, et enne Base64 kodeerimist oleks õige tähemärkide kodeering (tavaliselt UTF-8).

  2. Täiendamine: Standardne Base64 kasutab täiendamiseks "=" tähemärke, et tagada väljundi pikkuse olema 4 kordne. Mõned rakendused lubavad täiendamise vahelejätmist, mis võib põhjustada ühilduvusprobleeme.

  3. Reavahed: Traditsioonilised Base64 rakendused sisestavad ridade vahe (tavaliselt iga 76 tähemärgi järel) loetavuse jaoks, kuid kaasaegsed rakendused jätavad need sageli vahele.

  4. URL-ohutu Base64: Standardne Base64 kasutab "+" ja "/" tähemärke, millel on URL-des erilised tähendused. URL kontekstides kasutage URL-ohutut Base64, mis asendab need "-" ja "_".

  5. Tühikud: Dekodeerimise ajal on mõned rakendused leebed ja ignoreerivad tühikuid, samas kui teised nõuavad täpset sisendit.

  6. Suuruse suurenemine: Base64 kodeerimine suurendab andmete suurust umbes 33% (4 väljundbaitide 3 sisendbaidi kohta).

  7. Tõhusus: Base64 kodeerimine/dekodeerimine võib olla väga suurte andmete puhul arvutuslikult intensiivne. Suurte failide puhul kaaluge voogedastuse lähenemisviisi.

Viidatud Allikad

  1. RFC 4648 - Base16, Base32 ja Base64 andmekodeeringud
  2. RFC 2045 - MIME osa üks: Interneti sõnumite kehade formaat
  3. MDN Web Docs: Base64 kodeerimine ja dekodeerimine
  4. Base64 - Vikipeedia
  5. MIME - Vikipeedia
Feedback