Whiz Tools

Base64 kodētājs/dekodētājs

Pārvērst tekstu Base64 kodēšanā un no tās

Kopēt

Base64 Kodu un Dekodēšana

Ievads

Base64 ir binārā uz teksta kodēšanas shēma, kas pārstāv bināros datus ASCII virkņu formātā. Tā ir izstrādāta, lai pārvadātu datus, kas glabājas bināros formātos, pa kanāliem, kas uzticami atbalsta tikai teksta saturu. Base64 kodēšana pārvērš bināros datus 64 rakstzīmju kopā (tāpēc nosaukums), kas var tikt droši pārsūtīti caur teksta balstītiem protokoliem bez datu bojājumiem.

Base64 rakstzīmju kopā ietilpst:

  • Lielie burti A-Z (26 rakstzīmes)
  • Mazie burti a-z (26 rakstzīmes)
  • Cipari 0-9 (10 rakstzīmes)
  • Divas papildu rakstzīmes, parasti "+" un "/" (2 rakstzīmes)

Šis rīks ļauj jums viegli kodēt tekstu Base64 formātā vai dekodēt Base64 virknes atpakaļ to sākotnējā tekstā. Tas ir īpaši noderīgi izstrādātājiem, IT profesionāļiem un ikvienam, kas strādā ar datiem, kas jānosūta droši caur teksta balstītiem kanāliem.

Kā darbojas Base64 kodēšana

Kodēšanas process

Base64 kodēšana darbojas, pārvēršot katru trīs baitus (24 bitus) bināro datu grupu četrās Base64 rakstzīmēs. Process seko šiem soļiem:

  1. Pārvērst ievades tekstu tā binārajā attēlojumā (izmantojot ASCII vai UTF-8 kodējumu)
  2. Grupēt bināros datus 24 bitu (3 baitus) blokos
  3. Sadalīt katru 24 bitu bloku četros 6 bitu segmentos
  4. Pārvērst katru 6 bitu segmentu tā atbilstošajā Base64 rakstzīmē

Kad ievades garums nav dalāms ar 3, tiek pievienota "=" rakstzīme, lai uzturētu 4:3 attiecību starp izejas un ievades garumiem.

Matemātiskais attēlojums

Baitu secībai b1,b2,b3b_1, b_2, b_3 atbilstošās Base64 rakstzīmes c1,c2,c3,c4c_1, c_2, c_3, c_4 tiek aprēķinātas kā:

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

Kur Base64[i]\text{Base64}[i] apzīmē ii-to rakstzīmi Base64 alfabētā.

Dekodēšanas process

Base64 dekodēšana apgriež kodēšanas procesu:

  1. Pārvērst katru Base64 rakstzīmi tās 6 bitu vērtībā
  2. Apvienot šīs 6 bitu vērtības
  3. Grupēt bitus 8 bitu blokos (baitu)
  4. Pārvērst katru baitus tā atbilstošajā rakstzīmē

Piepildījums

Kad kodējamiem baitiem nav dalījuma ar 3, tiek piemērots piepildījums:

  • Ja paliek viens baits, tas tiek pārvērsts divās Base64 rakstzīmēs, kam seko "=="
  • Ja paliek divi baitus, tie tiek pārvērsti trijās Base64 rakstzīmēs, kam seko "="

Piemērs

Apskatīsim, kā kodēt tekstu "Hello" uz Base64:

  1. ASCII attēlojums "Hello": 72 101 108 108 111
  2. Binārais attēlojums: 01001000 01100101 01101100 01101100 01101111
  3. Grupēšana 6 bitu segmentos: 010010 000110 010101 101100 011011 000110 1111
  4. Pēdējais segments satur tikai 4 bitus, tāpēc mēs pievienojam nulles: 010010 000110 010101 101100 011011 000110 111100
  5. Pārvēršana decimālajā: 18, 6, 21, 44, 27, 6, 60
  6. Meklēšana Base64 alfabētā: S, G, V, s, b, G, 8
  7. Rezultāts ir "SGVsbG8="

Pievērsiet uzmanību "=" piepildījumam beigās, jo ievades garums (5 baitus) nav dalāms ar 3.

Formulas

Vispārējā formula Base64 kodētā virknes garuma aprēķināšanai ir:

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

Kur x\lceil x \rceil apzīmē griestu funkciju (noapaļošanu uz augšu līdz tuvākajam veselajam skaitlim).

Lietošanas gadījumi

Base64 kodēšana tiek plaši izmantota dažādās lietojumprogrammās:

  1. E-pasta pielikumi: MIME (Multipurpose Internet Mail Extensions) izmanto Base64, lai kodētu bināros pielikumus e-pastā.

  2. Datu URL: Mazu attēlu, fontu vai citu resursu tieša iekļaušana HTML, CSS vai JavaScript, izmantojot data: URL shēmu.

  3. API komunikācija: Droša bināro datu pārsūtīšana JSON datu kopās vai citos teksta balstītos API formātos.

  4. Bināro datu glabāšana teksta formātos: Kad binārie dati jāglabā XML, JSON vai citos teksta balstītos formātos.

  5. Autentifikācijas sistēmas: Pamata autentifikācija HTTP izmanto Base64 kodēšanu (lai gan tas nav drošības nolūkos, bet gan kodēšanai).

  6. Kryptogrāfija: Dažādu kriptogrāfisko protokolu un sistēmu daļā, bieži vien atslēgu vai sertifikātu kodēšanai.

  7. Sīkdatņu vērtības: Sarežģītu datu struktūru kodēšana, lai tās varētu glabāt sīkdatnēs.

Alternatīvas

Lai gan Base64 ir plaši izmantota, ir alternatīvas, kas var būt piemērotākas noteiktās situācijās:

  1. URL-droša Base64: Variants, kas izmanto "-" un "_" vietā "+" un "/", lai izvairītos no URL kodēšanas problēmām. Noderīgi datiem, kas tiks iekļauti URL.

  2. Base32: Izmanto 32 rakstzīmju kopu, rezultātā iegūstot garāku izeju, bet ar labāku cilvēku lasāmību un mazo burtiem.

  3. Hex kodēšana: Vienkārša pārvēršana uz heksadecimālo, kas ir mazāk efektīva (dubultojot izmēru), bet ļoti vienkārša un plaši atbalstīta.

  4. Bināra pārsūtīšana: Lieliem failiem vai kad efektivitāte ir svarīga, tieša bināra pārsūtīšanas protokoli, piemēram, HTTP ar atbilstošiem Content-Type virsrakstiem, ir priekšroka.

  5. Saspiešana + Base64: Lieliem teksta datiem, saspiešana pirms kodēšanas var mazināt izmēra pieaugumu.

  6. JSON/XML serializācija: Strukturētiem datiem, izmantošana vietējai JSON vai XML serializācijai var būt piemērotāka nekā Base64 kodēšana.

Vēsture

Base64 kodēšana ir savas saknes atradusi agrīnajā datorzinātnē un telekomunikāciju sistēmās, kur binārie dati bija jānosūta caur kanāliem, kas bija paredzēti tekstam.

Oficiālā Base64 specifikācija pirmo reizi tika publicēta 1987. gadā kā daļa no RFC 989, kas definēja privātuma uzlaboto pastu (PEM). Tas vēlāk tika atjaunināts RFC 1421 (1993) un RFC 2045 (1996, kā daļa no MIME).

Termins "Base64" nāk no tā, ka kodēšana izmanto 64 dažādas ASCII rakstzīmes, lai pārstāvētu bināros datus. Šī 64 rakstzīmju izvēle bija apzināta, jo 64 ir 2 pakāpe (2^6), kas padara pārvēršanu starp bināro un Base64 efektīvu.

Laika gaitā ir radušās vairākas Base64 variācijas:

  • Standarta Base64: Kā definēts RFC 4648, izmantojot A-Z, a-z, 0-9, +, / un = kā piepildījumu
  • URL-droša Base64: Izmanto - un _ vietā + un / lai izvairītos no URL kodēšanas problēmām
  • Failu droša Base64: Līdzīga URL-drošai, paredzēta izmantošanai failu nosaukumos
  • Modificēta Base64 IMAP protokolam: Izmantota IMAP protokolā ar atšķirīgu īpašo rakstzīmju kopu

Neskatoties uz to, ka Base64 ir vairāk nekā trīs desmitgades veca, tā joprojām ir pamata rīks mūsdienu datorzinātnē, īpaši ar web lietojumprogrammu un API pieaugumu, kas ļoti paļaujas uz teksta balstītiem datu formātiem, piemēram, JSON.

Koda piemēri

Šeit ir Base64 kodēšanas un dekodēšanas piemēri dažādās programmēšanas valodās:

// JavaScript Base64 kodēšana/dekodēšana
function encodeToBase64(text) {
  return btoa(text);
}

function decodeFromBase64(base64String) {
  try {
    return atob(base64String);
  } catch (e) {
    throw new Error("Nederīga Base64 virkne");
  }
}

// Piemēra izmantošana
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("Kodēts:", encoded);  // SGVsbG8sIFdvcmxkIQ==

try {
  const decoded = decodeFromBase64(encoded);
  console.log("Dekodēts:", decoded);  // Hello, World!
} catch (error) {
  console.error(error.message);
}
# Python Base64 kodēšana/dekodēšana
import base64

def encode_to_base64(text):
    # Pārvērst virkni par baitiem un tad kodēt
    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:
        # Pārvērst Base64 virkni par baitiem un tad dekodēt
        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"Nederīga Base64 virkne: {e}")

# Piemēra izmantošana
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
print(f"Kodēts: {encoded}")  # SGVsbG8sIFdvcmxkIQ==

try:
    decoded = decode_from_base64(encoded)
    print(f"Dekodēts: {decoded}")  # Hello, World!
except ValueError as e:
    print(e)
// Java Base64 kodēšana/dekodēšana
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("Nederīga Base64 virkne: " + e.getMessage());
        }
    }
    
    public static void main(String[] args) {
        String originalText = "Hello, World!";
        String encoded = encodeToBase64(originalText);
        System.out.println("Kodēts: " + encoded);  // SGVsbG8sIFdvcmxkIQ==
        
        try {
            String decoded = decodeFromBase64(encoded);
            System.out.println("Dekodēts: " + decoded);  // Hello, World!
        } catch (IllegalArgumentException e) {
            System.err.println(e.getMessage());
        }
    }
}
<?php
// PHP Base64 kodēšana/dekodēšana
function encodeToBase64($text) {
    return base64_encode($text);
}

function decodeFromBase64($base64String) {
    $decoded = base64_decode($base64String, true);
    if ($decoded === false) {
        throw new Exception("Nederīga Base64 virkne");
    }
    return $decoded;
}

// Piemēra izmantošana
$originalText = "Hello, World!";
$encoded = encodeToBase64($originalText);
echo "Kodēts: " . $encoded . "\n";  // SGVsbG8sIFdvcmxkIQ==

try {
    $decoded = decodeFromBase64($encoded);
    echo "Dekodēts: " . $decoded . "\n";  // Hello, World!
} catch (Exception $e) {
    echo "Kļūda: " . $e->getMessage() . "\n";
}
?>
// C# Base64 kodēšana/dekodēšana
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("Nederīga Base64 virkne");
        }
    }
    
    static void Main()
    {
        string originalText = "Hello, World!";
        string encoded = EncodeToBase64(originalText);
        Console.WriteLine($"Kodēts: {encoded}");  // SGVsbG8sIFdvcmxkIQ==
        
        try
        {
            string decoded = DecodeFromBase64(encoded);
            Console.WriteLine($"Dekodēts: {decoded}");  // Hello, World!
        }
        catch (FormatException e)
        {
            Console.WriteLine($"Kļūda: {e.Message}");
        }
    }
}
# Ruby Base64 kodēšana/dekodēšana
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 "Nederīga Base64 virkne: #{e.message}"
  end
end

# Piemēra izmantošana
original_text = "Hello, World!"
encoded = encode_to_base64(original_text)
puts "Kodēts: #{encoded}"  # SGVsbG8sIFdvcmxkIQ==

begin
  decoded = decode_from_base64(encoded)
  puts "Dekodēts: #{decoded}"  # Hello, World!
rescue StandardError => e
  puts "Kļūda: #{e.message}"
end
// Go Base64 kodēšana/dekodēšana
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("nederīga Base64 virkne: %v", err)
    }
    return string(bytes), nil
}

func main() {
    originalText := "Hello, World!"
    encoded := encodeToBase64(originalText)
    fmt.Println("Kodēts:", encoded)  // SGVsbG8sIFdvcmxkIQ==
    
    decoded, err := decodeFromBase64(encoded)
    if err != nil {
        fmt.Println("Kļūda:", err)
    } else {
        fmt.Println("Dekodēts:", decoded)  // Hello, World!
    }
}
// Swift Base64 kodēšana/dekodēšana
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
}

// Piemēra izmantošana
let originalText = "Hello, World!"
if let encoded = encodeToBase64(originalText) {
    print("Kodēts: \(encoded)")  // SGVsbG8sIFdvcmxkIQ==
    
    if let decoded = decodeFromBase64(encoded) {
        print("Dekodēts: \(decoded)")  // Hello, World!
    } else {
        print("Kļūda: Nevar dekodēt Base64 virkni")
    }
} else {
    print("Kļūda: Nevar kodēt tekstu")
}
' Excel VBA Base64 kodēšana/dekodēšana
' Piezīme: Tas prasa atsauci uz 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 = "Kļūda: Nederīga Base64 virkne"
End Function

' Izmantošana darblapā:
' =EncodeToBase64("Hello, World!")
' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
# R Base64 kodēšana/dekodēšana
# Prasa 'base64enc' pakotni
# install.packages("base64enc")
library(base64enc)

encode_to_base64 <- function(text) {
  # Pārvērst tekstu par izejas baitiem, tad kodēt
  text_raw <- charToRaw(text)
  base64_encoded <- base64encode(text_raw)
  return(rawToChar(base64_encoded))
}

decode_from_base64 <- function(base64_string) {
  tryCatch({
    # Pārvērst Base64 virkni par izejas baitiem, tad dekodēt
    base64_raw <- charToRaw(base64_string)
    decoded_raw <- base64decode(base64_raw)
    return(rawToChar(decoded_raw))
  }, error = function(e) {
    stop(paste("Nederīga Base64 virkne:", e$message))
  })
}

# Piemēra izmantošana
original_text <- "Hello, World!"
encoded <- encode_to_base64(original_text)
cat("Kodēts:", encoded, "\n")  # SGVsbG8sIFdvcmxkIQ==

tryCatch({
  decoded <- decode_from_base64(encoded)
  cat("Dekodēts:", decoded, "\n")  # Hello, World!
}, error = function(e) {
  cat("Kļūda:", e$message, "\n")
})
% MATLAB Base64 kodēšana/dekodēšana
function demo_base64()
    originalText = 'Hello, World!';
    
    % Kodēšana
    encoded = encode_to_base64(originalText);
    fprintf('Kodēts: %s\n', encoded);  % SGVsbG8sIFdvcmxkIQ==
    
    % Dekodēšana
    try
        decoded = decode_from_base64(encoded);
        fprintf('Dekodēts: %s\n', decoded);  % Hello, World!
    catch e
        fprintf('Kļūda: %s\n', e.message);
    end
end

function encoded = encode_to_base64(text)
    % Pārvērst tekstu par uint8 masīvu un kodēt
    bytes = uint8(text);
    encoded = base64encode(bytes);
end

function decoded = decode_from_base64(base64String)
    try
        % Dekodēt Base64 virkni par uint8 masīvu
        bytes = base64decode(base64String);
        decoded = char(bytes);
    catch
        error('Nederīga Base64 virkne');
    end
end
// C Base64 kodēšana/dekodēšana, izmantojot 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; // Nederīga Base64 ievade
    }
    
    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("Kodēts: %s\n", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    char* decoded = decode_from_base64(encoded);
    if (decoded) {
        printf("Dekodēts: %s\n", decoded);  // Hello, World!
        free(decoded);
    } else {
        printf("Kļūda: Nederīga Base64 virkne\n");
    }
    
    free(encoded);
    
    return 0;
}
// Rust Base64 kodēšana/dekodēšana
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!("Nederīga UTF-8 secība: {}", e))
            }
        },
        Err(e) => Err(format!("Nederīga Base64 virkne: {}", e))
    }
}

fn main() {
    let original_text = "Hello, World!";
    let encoded = encode_to_base64(original_text);
    println!("Kodēts: {}", encoded);  // SGVsbG8sIFdvcmxkIQ==
    
    match decode_from_base64(&encoded) {
        Ok(decoded) => println!("Dekodēts: {}", decoded),  // Hello, World!
        Err(e) => println!("Kļūda: {}", e)
    }
}

Malu gadījumi un apsvērumi

Strādājot ar Base64 kodēšanu un dekodēšanu, ņemiet vērā šos svarīgos apsvērumus:

  1. Unicode un ne-ASCII rakstzīmes: Kad kodējat tekstu ar ne-ASCII rakstzīmēm, pārliecinieties, ka pirms Base64 kodēšanas tiek izmantots pareizs rakstzīmju kodējums (parasti UTF-8).

  2. Piepildījums: Standarta Base64 izmanto piepildījumu ar "=" rakstzīmēm, lai nodrošinātu, ka izejas garums ir 4 reizes lielāks par 3. Dažas implementācijas ļauj izlaist piepildījumu, kas var izraisīt saderības problēmas.

  3. Rindkopas: Tradicionālās Base64 implementācijas ievieto rindkopas (parasti katras 76 rakstzīmes) lasāmībai, taču mūsdienu lietojumprogrammās bieži vien šīs tiek izlaistas.

  4. URL-droša Base64: Standarta Base64 izmanto "+" un "/" rakstzīmes, kurām ir īpaša nozīme URL. URL kontekstos izmantojiet URL-drošu Base64, kas šīs aizstāj ar "-" un "_".

  5. Balto vietu: Dekodējot, dažas implementācijas ir iecietīgas un ignorē baltās vietas, kamēr citas prasa precīzu ievadi.

  6. Izmēra pieaugums: Base64 kodēšana palielina datu izmēru par aptuveni 33% (4 izejas baitus katriem 3 ievades baitiem).

  7. Veiktspēja: Base64 kodēšana/dekodēšana var būt resursu ietilpīga ļoti lieliem datiem. Apsveriet straumēšanas pieejas lieliem failiem.

Atsauces

  1. RFC 4648 - Base16, Base32 un Base64 datu kodējumi
  2. RFC 2045 - MIME pirmā daļa: Interneta ziņojumu ķermeņu formāts
  3. MDN Web Docs: Base64 kodēšana un dekodēšana
  4. Base64 - Vikipēdija
  5. MIME - Vikipēdija
Feedback