Codificador y Decodificador Base64: Convierte Texto a/desde Base64
Herramienta en línea gratuita para codificar texto a Base64 o decodificar cadenas Base64 de vuelta a texto. Soporta codificación Base64 estándar y segura para URL con conversión instantánea.
Codificador/Decodificador Base64
Convierte texto a y desde la codificación Base64
Documentación
Codificador y Decodificador Base64
Introducción
Base64 es un esquema de codificación de texto a binario que representa datos binarios en un formato de cadena ASCII. Está diseñado para transportar datos almacenados en formatos binarios a través de canales que solo admiten de manera confiable contenido de texto. La codificación Base64 convierte datos binarios en un conjunto de 64 caracteres (de ahí el nombre) que pueden ser transmitidos de manera segura a través de protocolos basados en texto sin corrupción de datos.
El conjunto de caracteres Base64 consiste en:
- Letras mayúsculas A-Z (26 caracteres)
- Letras minúsculas a-z (26 caracteres)
- Dígitos 0-9 (10 caracteres)
- Dos caracteres adicionales, típicamente "+" y "/" (2 caracteres)
Esta herramienta te permite codificar fácilmente texto en formato Base64 o decodificar cadenas Base64 de vuelta a su texto original. Es particularmente útil para desarrolladores, profesionales de TI y cualquier persona que trabaje con datos que necesitan ser transmitidos de manera segura a través de canales basados en texto.
Cómo Funciona la Codificación Base64
Proceso de Codificación
La codificación Base64 funciona convirtiendo cada grupo de tres bytes (24 bits) de datos binarios en cuatro caracteres Base64. El proceso sigue estos pasos:
- Convierte el texto de entrada a su representación binaria (usando codificación ASCII o UTF-8)
- Agrupa los datos binarios en bloques de 24 bits (3 bytes)
- Divide cada bloque de 24 bits en cuatro grupos de 6 bits
- Convierte cada grupo de 6 bits en su correspondiente carácter Base64
Cuando la longitud de la entrada no es divisible por 3, se añade un relleno con caracteres "=" para mantener la proporción de 4:3 de longitudes de salida a entrada.
Representación Matemática
Para una secuencia de bytes , los correspondientes caracteres Base64 se calculan como:
Donde representa el carácter -ésimo en el alfabeto Base64.
Proceso de Decodificación
La decodificación Base64 invierte el proceso de codificación:
- Convierte cada carácter Base64 a su valor de 6 bits
- Concatenar estos valores de 6 bits
- Agrupa los bits en bloques de 8 bits (bytes)
- Convierte cada byte en su correspondiente carácter
Relleno
Cuando el número de bytes a codificar no es divisible por 3, se aplica relleno:
- Si queda un byte, se convierte en dos caracteres Base64 seguidos de "=="
- Si quedan dos bytes, se convierten en tres caracteres Base64 seguidos de "="
Ejemplo
Codifiquemos el texto "Hola" a Base64:
- Representación ASCII de "Hola": 72 111 108 97
- Representación binaria: 01001000 01101111 01101100 01100001
- Agrupando en bloques de 6 bits: 010010 000110 111101 101100 000001
- El último bloque solo tiene 2 bits, así que rellenamos con ceros: 010010 000110 111101 101100 00000100
- Convirtiendo a decimal: 18, 6, 61, 44, 1
- Buscando en el alfabeto Base64: S, G, V, s, Y
- El resultado es "SG9sYQ=="
Nota el relleno "=" al final porque la longitud de la entrada (4 bytes) no es divisible por 3.
Fórmula
La fórmula general para calcular la longitud de una cadena codificada en Base64 es:
Donde representa la función techo (redondeando hacia arriba al entero más cercano).
Casos de Uso
La codificación Base64 se utiliza ampliamente en diversas aplicaciones:
-
Adjuntos de Correo Electrónico: MIME (Extensiones de Correo de Internet Multipropósito) utiliza Base64 para codificar adjuntos binarios en correos electrónicos.
-
URLs de Datos: Incrustando pequeñas imágenes, fuentes u otros recursos directamente en HTML, CSS o JavaScript utilizando el esquema de URL
data:
. -
Comunicaciones API: Transmitiendo de manera segura datos binarios en cargas útiles JSON u otros formatos de API basados en texto.
-
Almacenamiento de Datos Binarios en Formatos de Texto: Cuando los datos binarios necesitan ser almacenados en XML, JSON u otros formatos basados en texto.
-
Sistemas de Autenticación: La Autenticación Básica en HTTP utiliza la codificación Base64 (aunque no es para seguridad, solo para codificación).
-
Criptografía: Como parte de varios protocolos y sistemas criptográficos, a menudo para codificar claves o certificados.
-
Valores de Cookies: Codificando estructuras de datos complejas para ser almacenadas en cookies.
Alternativas
Si bien Base64 se utiliza ampliamente, existen alternativas que pueden ser más apropiadas en ciertas situaciones:
-
Base64 Seguro para URL: Una variante que utiliza "-" y "_" en lugar de "+" y "/" para evitar problemas de codificación de URL. Útil para datos que se incluirán en URLs.
-
Base32: Utiliza un conjunto de 32 caracteres, resultando en una salida más larga pero con mejor legibilidad humana e insensibilidad a mayúsculas y minúsculas.
-
Codificación Hexadecimal: Conversión simple a hexadecimal, que es menos eficiente (duplica el tamaño) pero muy simple y ampliamente soportada.
-
Transferencia Binaria: Para archivos grandes o cuando la eficiencia es crucial, los protocolos de transferencia binaria directa como HTTP con encabezados de tipo de contenido apropiados son preferibles.
-
Compresión + Base64: Para grandes datos de texto, comprimir antes de codificar puede mitigar el aumento de tamaño.
-
Serialización JSON/XML: Para datos estructurados, usar la serialización nativa JSON o XML puede ser más apropiado que la codificación Base64.
Historia
La codificación Base64 tiene sus raíces en los primeros sistemas de computación y telecomunicaciones donde los datos binarios necesitaban ser transmitidos a través de canales diseñados para texto.
La especificación formal de Base64 se publicó por primera vez en 1987 como parte de la RFC 989, que definió el Correo Electrónico Mejorado por Privacidad (PEM). Esto fue posteriormente actualizado en la RFC 1421 (1993) y la RFC 2045 (1996, como parte de MIME).
El término "Base64" proviene del hecho de que la codificación utiliza 64 caracteres ASCII diferentes para representar datos binarios. Esta elección de 64 caracteres fue deliberada, ya que 64 es una potencia de 2 (2^6), lo que hace que la conversión entre binario y Base64 sea eficiente.
Con el tiempo, han surgido varias variantes de Base64:
- Base64 Estándar: Como se define en la RFC 4648, utilizando A-Z, a-z, 0-9, +, / y = para el relleno
- Base64 Seguro para URL: Utiliza - y _ en lugar de + y / para evitar problemas de codificación de URL
- Base64 Seguro para Nombres de Archivo: Similar a Base64 seguro para URL, diseñado para su uso en nombres de archivo
- Base64 Modificado para IMAP: Utilizado en el protocolo IMAP con un conjunto diferente de caracteres especiales
A pesar de tener más de tres décadas, Base64 sigue siendo una herramienta fundamental en la computación moderna, particularmente con el auge de aplicaciones web y APIs que dependen en gran medida de formatos de datos basados en texto como JSON.
Ejemplos de Código
Aquí hay ejemplos de codificación y decodificación Base64 en varios lenguajes de programación:
1// Codificación/Decodificación Base64 en 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("Cadena Base64 no válida");
11 }
12}
13
14// Ejemplo de uso
15const originalText = "Hola, Mundo!";
16const encoded = encodeToBase64(originalText);
17console.log("Codificado:", encoded); // SG9sYSwgTXVuZG8h
18
19try {
20 const decoded = decodeFromBase64(encoded);
21 console.log("Decodificado:", decoded); // Hola, Mundo!
22} catch (error) {
23 console.error(error.message);
24}
25
1# Codificación/Decodificación Base64 en Python
2import base64
3
4def encode_to_base64(text):
5 # Convertir cadena a bytes y luego codificar
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 # Convertir cadena base64 a bytes y luego decodificar
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"Cadena Base64 no válida: {e}")
18
19# Ejemplo de uso
20original_text = "Hola, Mundo!"
21encoded = encode_to_base64(original_text)
22print(f"Codificado: {encoded}") # SG9sYSwgTXVuZG8h
23
24try:
25 decoded = decode_from_base64(encoded)
26 print(f"Decodificado: {decoded}") # Hola, Mundo!
27except ValueError as e:
28 print(e)
29
1// Codificación/Decodificación Base64 en 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("Cadena Base64 no válida: " + e.getMessage());
19 }
20 }
21
22 public static void main(String[] args) {
23 String originalText = "Hola, Mundo!";
24 String encoded = encodeToBase64(originalText);
25 System.out.println("Codificado: " + encoded); // SG9sYSwgTXVuZG8h
26
27 try {
28 String decoded = decodeFromBase64(encoded);
29 System.out.println("Decodificado: " + decoded); // Hola, Mundo!
30 } catch (IllegalArgumentException e) {
31 System.err.println(e.getMessage());
32 }
33 }
34}
35
1<?php
2// Codificación/Decodificación Base64 en 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("Cadena Base64 no válida");
11 }
12 return $decoded;
13}
14
15// Ejemplo de uso
16$originalText = "Hola, Mundo!";
17$encoded = encodeToBase64($originalText);
18echo "Codificado: " . $encoded . "\n"; // SG9sYSwgTXVuZG8h
19
20try {
21 $decoded = decodeFromBase64($encoded);
22 echo "Decodificado: " . $decoded . "\n"; // Hola, Mundo!
23} catch (Exception $e) {
24 echo "Error: " . $e->getMessage() . "\n";
25}
26?>
27
1// Codificación/Decodificación Base64 en 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("Cadena Base64 no válida");
23 }
24 }
25
26 static void Main()
27 {
28 string originalText = "Hola, Mundo!";
29 string encoded = EncodeToBase64(originalText);
30 Console.WriteLine($"Codificado: {encoded}"); // SG9sYSwgTXVuZG8h
31
32 try
33 {
34 string decoded = DecodeFromBase64(encoded);
35 Console.WriteLine($"Decodificado: {decoded}"); // Hola, Mundo!
36 }
37 catch (FormatException e)
38 {
39 Console.WriteLine($"Error: {e.Message}");
40 }
41 }
42}
43
1# Codificación/Decodificación Base64 en 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 "Cadena Base64 no válida: #{e.message}"
13 end
14end
15
16# Ejemplo de uso
17original_text = "Hola, Mundo!"
18encoded = encode_to_base64(original_text)
19puts "Codificado: #{encoded}" # SG9sYSwgTXVuZG8h
20
21begin
22 decoded = decode_from_base64(encoded)
23 puts "Decodificado: #{decoded}" # Hola, Mundo!
24rescue StandardError => e
25 puts "Error: #{e.message}"
26end
27
1// Codificación/Decodificación Base64 en 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("cadena Base64 no válida: %v", err)
17 }
18 return string(bytes), nil
19}
20
21func main() {
22 originalText := "Hola, Mundo!"
23 encoded := encodeToBase64(originalText)
24 fmt.Println("Codificado:", encoded) // SG9sYSwgTXVuZG8h
25
26 decoded, err := decodeFromBase64(encoded)
27 if err != nil {
28 fmt.Println("Error:", err)
29 } else {
30 fmt.Println("Decodificado:", decoded) // Hola, Mundo!
31 }
32}
33
1// Codificación/Decodificación Base64 en 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// Ejemplo de uso
19let originalText = "Hola, Mundo!"
20if let encoded = encodeToBase64(originalText) {
21 print("Codificado: \(encoded)") // SG9sYSwgTXVuZG8h
22
23 if let decoded = decodeFromBase64(encoded) {
24 print("Decodificado: \(decoded)") // Hola, Mundo!
25 } else {
26 print("Error: No se pudo decodificar la cadena Base64")
27 }
28} else {
29 print("Error: No se pudo codificar el texto")
30}
31
1' Codificación/Decodificación Base64 en VBA de Excel
2' Nota: Esto requiere una referencia a 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 = "Error: Cadena Base64 no válida"
39End Function
40
41' Uso en una hoja de cálculo:
42' =EncodeToBase64("Hola, Mundo!")
43' =DecodeFromBase64("SG9sYSwgTXVuZG8h")
44
1# Codificación/Decodificación Base64 en R
2# Requiere el paquete 'base64enc'
3# install.packages("base64enc")
4library(base64enc)
5
6encode_to_base64 <- function(text) {
7 # Convertir texto a bytes crudos, luego codificar
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 # Convertir cadena base64 a crudos, luego decodificar
16 base64_raw <- charToRaw(base64_string)
17 decoded_raw <- base64decode(base64_raw)
18 return(rawToChar(decoded_raw))
19 }, error = function(e) {
20 stop(paste("Cadena Base64 no válida:", e$message))
21 })
22}
23
24# Ejemplo de uso
25original_text <- "Hola, Mundo!"
26encoded <- encode_to_base64(original_text)
27cat("Codificado:", encoded, "\n") # SG9sYSwgTXVuZG8h
28
29tryCatch({
30 decoded <- decode_from_base64(encoded)
31 cat("Decodificado:", decoded, "\n") # Hola, Mundo!
32}, error = function(e) {
33 cat("Error:", e$message, "\n")
34})
35
1% Codificación/Decodificación Base64 en MATLAB
2function demo_base64()
3 originalText = 'Hola, Mundo!';
4
5 % Codificar
6 encoded = encode_to_base64(originalText);
7 fprintf('Codificado: %s\n', encoded); % SG9sYSwgTXVuZG8h
8
9 % Decodificar
10 try
11 decoded = decode_from_base64(encoded);
12 fprintf('Decodificado: %s\n', decoded); % Hola, Mundo!
13 catch e
14 fprintf('Error: %s\n', e.message);
15 end
16end
17
18function encoded = encode_to_base64(text)
19 % Convertir texto a arreglo uint8 y codificar
20 bytes = uint8(text);
21 encoded = base64encode(bytes);
22end
23
24function decoded = decode_from_base64(base64String)
25 try
26 % Decodificar cadena base64 a arreglo uint8
27 bytes = base64decode(base64String);
28 decoded = char(bytes);
29 catch
30 error('Cadena Base64 no válida');
31 end
32end
33
1// Codificación/Decodificación Base64 en C usando 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; // Entrada Base64 no válida
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 = "Hola, Mundo!";
58
59 char* encoded = encode_to_base64(original_text);
60 printf("Codificado: %s\n", encoded); // SG9sYSwgTXVuZG8h
61
62 char* decoded = decode_from_base64(encoded);
63 if (decoded) {
64 printf("Decodificado: %s\n", decoded); // Hola, Mundo!
65 free(decoded);
66 } else {
67 printf("Error: Cadena Base64 no válida\n");
68 }
69
70 free(encoded);
71
72 return 0;
73}
74
1// Codificación/Decodificación Base64 en 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!("Secuencia UTF-8 no válida: {}", e))
15 }
16 },
17 Err(e) => Err(format!("Cadena Base64 no válida: {}", e))
18 }
19}
20
21fn main() {
22 let original_text = "Hola, Mundo!";
23 let encoded = encode_to_base64(original_text);
24 println!("Codificado: {}", encoded); // SG9sYSwgTXVuZG8h
25
26 match decode_from_base64(&encoded) {
27 Ok(decoded) => println!("Decodificado: {}", decoded), // Hola, Mundo!
28 Err(e) => println!("Error: {}", e)
29 }
30}
31
Casos Límite y Consideraciones
Al trabajar con codificación y decodificación Base64, ten en cuenta estas consideraciones importantes:
-
Unicode y Caracteres No ASCII: Al codificar texto con caracteres no ASCII, asegúrate de la codificación de caracteres adecuada (generalmente UTF-8) antes de la codificación Base64.
-
Relleno: La Base64 estándar utiliza relleno con caracteres "=" para asegurar que la longitud de salida sea un múltiplo de 4. Algunas implementaciones permiten omitir el relleno, lo que puede causar problemas de compatibilidad.
-
Saltos de Línea: Las implementaciones tradicionales de Base64 insertan saltos de línea (típicamente cada 76 caracteres) para la legibilidad, pero las aplicaciones modernas a menudo omiten esto.
-
Base64 Seguro para URL: La Base64 estándar utiliza los caracteres "+" y "/" que tienen significados especiales en URLs. Para contextos de URL, utiliza Base64 seguro para URL que reemplaza estos con "-" y "_".
-
Espacios en Blanco: Al decodificar, algunas implementaciones son indulgentes y ignoran los espacios en blanco, mientras que otras requieren una entrada exacta.
-
Aumento de Tamaño: La codificación Base64 aumenta el tamaño de los datos aproximadamente en un 33% (4 bytes de salida por cada 3 bytes de entrada).
-
Rendimiento: La codificación/decodificación Base64 puede ser intensiva en recursos para datos muy grandes. Considera enfoques de transmisión para archivos grandes.
Referencias
Comentarios
Haz clic en el aviso de comentarios para comenzar a dar comentarios sobre esta herramienta
Herramientas Relacionadas
Descubre más herramientas que podrían ser útiles para tu flujo de trabajo