Encoder și Decoder Base64: Conversie Text în/din Base64
Instrument online gratuit pentru a codifica text în Base64 sau a decodifica șiruri Base64 înapoi în text. Suportă codificarea standard și codificarea Base64 sigură pentru URL, cu conversie instantanee.
Encoder/Decoder Base64
Convertiți textul în și din codificarea Base64
Documentație
Encoder și Decodor Base64
Introducere
Base64 este un sistem de codificare binar-la-text care reprezintă date binare într-un format de șir ASCII. Este conceput pentru a transporta date stocate în formate binare prin canale care susțin în mod fiabil doar conținut text. Codificarea Base64 convertește datele binare într-un set de 64 de caractere (de aici și numele) care pot fi transmise în siguranță prin protocoale bazate pe text fără coruperea datelor.
Setul de caractere Base64 constă din:
- Litere mari A-Z (26 caractere)
- Litere mici a-z (26 caractere)
- Cifre 0-9 (10 caractere)
- Două caractere suplimentare, de obicei "+" și "/" (2 caractere)
Acest instrument vă permite să codificați cu ușurință text în format Base64 sau să decodificați șiruri Base64 înapoi în textul lor original. Este deosebit de util pentru dezvoltatori, profesioniști IT și oricine lucrează cu date care trebuie transmise în siguranță prin canale bazate pe text.
Cum funcționează codificarea Base64
Procesul de codificare
Codificarea Base64 funcționează prin convertirea fiecărui grup de trei octeți (24 de biți) de date binare în patru caractere Base64. Procesul urmează acești pași:
- Convertiți textul de intrare în reprezentarea sa binară (folosind codificarea ASCII sau UTF-8)
- Grupează datele binare în bucăți de 24 de biți (3 octeți)
- Împărțiți fiecare bucată de 24 de biți în patru grupuri de 6 biți
- Convertește fiecare grup de 6 biți în caracterul Base64 corespunzător
Când lungimea intrării nu este divizibilă cu 3, se adaugă umplutură cu caractere "=" pentru a menține raportul de 4:3 al lungimii de ieșire la lungimea de intrare.
Reprezentare matematică
Pentru o secvență de octeți , caracterele Base64 corespunzătoare sunt calculate astfel:
Unde reprezintă caracterul din alfabetul Base64.
Procesul de decodare
Decodarea Base64 inversează procesul de codificare:
- Convertește fiecare caracter Base64 în valoarea sa de 6 biți
- Concatenează aceste valori de 6 biți
- Grupează biții în bucăți de 8 biți (octeți)
- Convertește fiecare octet în caracterul său corespunzător
Umplutură
Când numărul de octeți de codificat nu este divizibil cu 3, se aplică umplutura:
- Dacă rămâne un octet, acesta este convertit în două caractere Base64 urmate de "=="
- Dacă rămân două octeți, aceștia sunt convertiți în trei caractere Base64 urmate de "="
Exemplu
Să codificăm textul "Hello" în Base64:
- Reprezentarea ASCII a "Hello": 72 101 108 108 111
- Reprezentarea binară: 01001000 01100101 01101100 01101100 01101111
- Grupare în bucăți de 6 biți: 010010 000110 010101 101100 011011 000110 1111
- Ultima bucată are doar 4 biți, așa că umplem cu zerouri: 010010 000110 010101 101100 011011 000110 111100
- Conversia în zecimal: 18, 6, 21, 44, 27, 6, 60
- Căutarea în alfabetul Base64: S, G, V, s, b, G, 8
- Rezultatul este "SGVsbG8="
Observați umplutura "=" de la sfârșit, deoarece lungimea intrării (5 octeți) nu este divizibilă cu 3.
Formula
Formula generală pentru calcularea lungimii unui șir codificat Base64 este:
Unde reprezintă funcția de tavan (rotunjirea în sus la cel mai apropiat întreg).
Cazuri de utilizare
Codificarea Base64 este utilizată pe scară largă în diverse aplicații:
-
Atașamente email: MIME (Extensii de poștă electronică multifuncționale) folosește Base64 pentru a codifica atașamentele binare în email.
-
URL-uri de date: Încorporarea imaginilor mici, fonturilor sau altor resurse direct în HTML, CSS sau JavaScript folosind schema URL
data:
. -
Comunicarea API: Transmiterea în siguranță a datelor binare în payload-uri JSON sau alte formate API bazate pe text.
-
Stocarea datelor binare în formate text: Când datele binare trebuie stocate în XML, JSON sau alte formate bazate pe text.
-
Sisteme de autentificare: Autentificarea de bază în HTTP folosește codificarea Base64 (deși nu este pentru securitate, ci doar pentru codificare).
-
Criptografie: Ca parte a diferitelor protocoale și sisteme criptografice, adesea pentru codificarea cheilor sau certificatelor.
-
Valori cookie: Codificarea structurilor de date complexe pentru a fi stocate în cookie-uri.
Alternative
Deși Base64 este utilizat pe scară largă, există alternative care ar putea fi mai potrivite în anumite situații:
-
Base64 sigur pentru URL: O variantă care folosește "-" și "_" în loc de "+" și "/" pentru a evita problemele de codificare URL. Utilă pentru datele care vor fi incluse în URL-uri.
-
Base32: Folosește un set de 32 de caractere, rezultând o ieșire mai lungă, dar cu o citire mai bună pentru oameni și insensibilitate la caz.
-
Codificare hexazecimală: Conversie simplă în hexazecimal, care este mai puțin eficientă (dublează dimensiunea) dar foarte simplă și larg acceptată.
-
Transfer binar: Pentru fișiere mari sau când eficiența este crucială, protocoalele de transfer binar direct, cum ar fi HTTP cu antete de tip de conținut adecvate, sunt preferabile.
-
Compresie + Base64: Pentru date text mari, comprimarea înainte de codificare poate diminua creșterea dimensiunii.
-
Serializare JSON/XML: Pentru date structurate, utilizarea serializării native JSON sau XML ar putea fi mai potrivită decât codificarea Base64.
Istorie
Codificarea Base64 își are rădăcinile în sistemele timpurii de calcul și telecomunicații în care datele binare trebuiau transmise prin canale concepute pentru text.
Specificația formală a Base64 a fost publicată pentru prima dată în 1987 ca parte a RFC 989, care a definit Poșta electronică îmbunătățită prin confidențialitate (PEM). Aceasta a fost ulterior actualizată în RFC 1421 (1993) și RFC 2045 (1996, ca parte a MIME).
Termenul "Base64" provine din faptul că codificarea folosește 64 de caractere ASCII diferite pentru a reprezenta datele binare. Această alegere a 64 de caractere a fost deliberată, deoarece 64 este o putere a lui 2 (2^6), ceea ce face conversia între binar și Base64 eficientă.
De-a lungul timpului, au apărut mai multe variante ale Base64:
- Base64 standard: Așa cum este definit în RFC 4648, folosind A-Z, a-z, 0-9, +, / și = pentru umplutură
- Base64 sigur pentru URL: Folosește - și _ în loc de + și / pentru a evita problemele de codificare URL
- Base64 sigur pentru nume de fișiere: Similar cu cel sigur pentru URL, conceput pentru utilizare în nume de fișiere
- Base64 modificat pentru IMAP: Utilizat în protocolul IMAP cu un set diferit de caractere speciale
În ciuda faptului că are peste trei decenii, Base64 rămâne un instrument fundamental în computația modernă, în special cu creșterea aplicațiilor web și API-urilor care se bazează în mare măsură pe formate de date bazate pe text, cum ar fi JSON.
Exemple de cod
Iată exemple de codificare și decodare Base64 în diferite limbaje de programare:
1// Codificare/Decodare Base64 în 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("Șir Base64 invalid");
11 }
12}
13
14// Exemplu de utilizare
15const originalText = "Hello, World!";
16const encoded = encodeToBase64(originalText);
17console.log("Codificat:", encoded); // SGVsbG8sIFdvcmxkIQ==
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("Decodificat:", decoded); // Hello, World!
22} catch (error) {
23 console.error(error.message);
24}
25
1# Codificare/Decodare Base64 în Python
2import base64
3
4def encode_to_base64(text):
5 # Convertiți șirul în octeți și apoi codificați
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 # Convertiți șirul base64 în octeți și apoi decodificați
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"Șir Base64 invalid: {e}")
18
19# Exemplu de utilizare
20original_text = "Hello, World!"
21encoded = encode_to_base64(original_text)
22print(f"Codificat: {encoded}") # SGVsbG8sIFdvcmxkIQ==
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"Decodificat: {decoded}") # Hello, World!
27except ValueError as e:
28 print(e)
29
1// Codificare/Decodare Base64 în 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("Șir Base64 invalid: " + 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("Codificat: " + encoded); // SGVsbG8sIFdvcmxkIQ==
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("Decodificat: " + decoded); // Hello, World!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// Codificare/Decodare Base64 în 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("Șir Base64 invalid");
11 }
12 return $decoded;
13}
14
15// Exemplu de utilizare
16$originalText = "Hello, World!";
17$encoded = encodeToBase64($originalText);
18echo "Codificat: " . $encoded . "\n"; // SGVsbG8sIFdvcmxkIQ==
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "Decodificat: " . $decoded . "\n"; // Hello, World!
23} catch (Exception $e) {
24 echo "Eroare: " . $e->getMessage() . "\n";
25}
26?>
27
1// Codificare/Decodare Base64 în 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("Șir Base64 invalid");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hello, World!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"Codificat: {encoded}"); // SGVsbG8sIFdvcmxkIQ==
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"Decodificat: {decoded}"); // Hello, World!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"Eroare: {e.Message}");
40 }
41 }
42}
43
1# Codificare/Decodare Base64 în 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 "Șir Base64 invalid: #{e.message}"
13 end
14end
15
16# Exemplu de utilizare
17original_text = "Hello, World!"
18encoded = encode_to_base64(original_text)
19puts "Codificat: #{encoded}" # SGVsbG8sIFdvcmxkIQ==
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "Decodificat: #{decoded}" # Hello, World!
24rescue StandardError => e
25 puts "Eroare: #{e.message}"
26end
27
1// Codificare/Decodare Base64 în 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("șir Base64 invalid: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hello, World!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("Codificat:", encoded) // SGVsbG8sIFdvcmxkIQ==
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("Eroare:", err)
29 } else {
30 fmt.Println("Decodificat:", decoded) // Hello, World!
31 }
32}
33
1// Codificare/Decodare Base64 în 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// Exemplu de utilizare
19let originalText = "Hello, World!"
20if let encoded = encodeToBase64(originalText) {
21 print("Codificat: \(encoded)") // SGVsbG8sIFdvcmxkIQ==
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("Decodificat: \(decoded)") // Hello, World!
25 } else {
26 print("Eroare: Nu s-a putut decodifica șirul Base64")
27 }
28} else {
29 print("Eroare: Nu s-a putut codifica textul")
30}
31
1' Codificare/Decodare Base64 în Excel VBA
2' Notă: Aceasta necesită o referință la 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 = "Eroare: Șir Base64 invalid"
39End Function
40
41' Utilizare într-o foaie de lucru:
42' =EncodeToBase64("Hello, World!")
43' =DecodeFromBase64("SGVsbG8sIFdvcmxkIQ==")
44
1# Codificare/Decodare Base64 în R
2# Necesită pachetul 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # Convertiți textul în octeți raw, apoi codificați
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 # Convertiți șirul base64 în raw, apoi decodificați
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("Șir Base64 invalid:", e$message))
21 })
22}
23
24# Exemplu de utilizare
25original_text <- "Hello, World!"
26encoded <- encode_to_base64(original_text)
27cat("Codificat:", encoded, "\n") # SGVsbG8sIFdvcmxkIQ==
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("Decodificat:", decoded, "\n") # Hello, World!
32}, error = function(e) {
33 cat("Eroare:", e$message, "\n")
34})
35
1% Codificare/Decodare Base64 în MATLAB
2function demo_base64()
3 originalText = 'Hello, World!';
4
5 % Codificare
6 encoded = encode_to_base64(originalText);
7 fprintf('Codificat: %s\n', encoded); % SGVsbG8sIFdvcmxkIQ==
8
9 % Decodare
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('Decodificat: %s\n', decoded); % Hello, World!
13 catch e
14 fprintf('Eroare: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % Convertiți textul în matrice uint8 și codificați
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % Decodificați șirul base64 în matrice uint8
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('Șir Base64 invalid');
31 end
32end
33
1// Codificare/Decodare Base64 în C folosind 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; // Șir Base64 invalid
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("Codificat: %s\n", encoded); // SGVsbG8sIFdvcmxkIQ==
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("Decodificat: %s\n", decoded); // Hello, World!
65 free(decoded);
66 } else {
67 printf("Eroare: Șir Base64 invalid\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// Codificare/Decodare Base64 în 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!("Secvență UTF-8 invalidă: {}", e))
15 }
16 },
17 Err(e) => Err(format!("Șir Base64 invalid: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hello, World!";
23 let encoded = encode_to_base64(original_text);
24 println!("Codificat: {}", encoded); // SGVsbG8sIFdvcmxkIQ==
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("Decodificat: {}", decoded), // Hello, World!
28 Err(e) => println!("Eroare: {}", e)
29 }
30}
31
Cazuri de margine și considerații
Când lucrați cu codificarea și decodarea Base64, fiți conștienți de aceste considerații importante:
-
Caractere Unicode și non-ASCII: Când codificați text cu caractere non-ASCII, asigurați-vă că utilizați codificarea corectă a caracterelor (de obicei UTF-8) înainte de codificarea Base64.
-
Umplutură: Base64 standard folosește umplutură cu caractere "=" pentru a asigura că lungimea ieșirii este un multiplu de 4. Unele implementări permit omisiunea umpluturii, ceea ce poate cauza probleme de compatibilitate.
-
Între întreruperi: Implementările tradiționale Base64 introduc întreruperi de linie (de obicei la fiecare 76 de caractere) pentru lizibilitate, dar aplicațiile moderne omit adesea aceste întreruperi.
-
Base64 sigur pentru URL: Base64 standard folosește caracterele "+" și "/" care au semnificații speciale în URL-uri. Pentru contexte URL, utilizați Base64 sigur pentru URL care înlocuiește acestea cu "-" și "_".
-
Spațiu alb: La decodare, unele implementări sunt indulgente și ignoră spațiile albe, în timp ce altele necesită o intrare exactă.
-
Creșterea dimensiunii: Codificarea Base64 crește dimensiunea datelor cu aproximativ 33% (4 octeți de ieșire pentru fiecare 3 octeți de intrare).
-
Performanță: Codificarea/decodarea Base64 poate fi intensivă din punct de vedere computațional pentru date foarte mari. Luați în considerare abordările de streaming pentru fișiere mari.
Referințe
Feedback
Click pe toast-ul de feedback pentru a începe să oferi feedback despre acest instrument
Instrumente Asemănătoare
Descoperă mai multe instrumente care ar putea fi utile pentru fluxul tău de lucru