Advertisement
  1. Code
  2. PHP

Cómo usar la codificación Base64 en PHP

Scroll to top
Read Time: 5 min

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

En este artículo rápido, analizaremos los conceptos básicos de la codificación Base64 en el contexto de PHP. Básicamente veremos cómo puedes usar las funciones de PHP para transformar datos al formato codificado en Base64.

¿Qué es la codificación Base64?

Base64 es una codificación de datos binarios en ASCII. Cada carácter de la cadena representa seis bits de información. De manera efectiva, muestra los datos binarios en la representación Base64. Consulta este manual sobre sistemas numéricos y bases si necesitas un repaso.

La codificación Base64 se usa principalmente para codificar datos binarios en texto ASCII, en situaciones en las que quieres transferir dichos datos a través de protocolos diseñados específicamente para el manejo de datos de tipo texto. Esto garantiza que los datos permanezcan intactos mientras son transportados. Específicamente, Base64 se usa para tareas como el envío de correos electrónicos y la carga de datos binarios en formularios HTML.

Otro uso común de la codificación Base64 es el hashing. Por supuesto, no deberías usar la codificación Base64 en sí para generar hashes, ya que se puede decodificar fácilmente. En primer lugar, debes generar un hash con la ayuda de un algoritmo hash como SHA, y luego debes convertir el hash resultante al formato codificado en Base64 para mostrarlo. Es muy fácil comparar dos sumas de verificación codificadas en Base64 para la comprobación de la integridad.

En la siguiente sección discutiremos las funciones de Base64 integradas en PHP.

Funciones de Base64 en PHP

En PHP existen dos funciones principales que se ocupan de la codificación Base64. La función base64_encode te permite codificar datos en el formato Base64 de MIME. Por otro lado, la función base64_decode se usa para decodificar los datos codificados en Base64 de MIME.

Revisemos cada una de estas funciones a detalle.

base64_encode

Analicemos la sintaxis de la función base64_encode.

1
base64_encode ( string $string ) : string

El único argumento que necesitas enviar a la función base64_encode es la cadena de origen que quieras codificar a Base64 de MIME.

Esta devuelve una cadena codificada en Base64. Es importante tomar en cuenta que los datos codificados en Base64 ocupan aproximadamente un 33% más de espacio en la memoria que los datos originales.

base64_decode

Analicemos la sintaxis de la función base64_decode.

1
base64_decode ( string $string , bool $strict = false ) : string|false

El primer argumento son los datos codificados en Base64 que desees decodificar.

El segundo argumento es opcional, pero si envías TRUE la función realizará una comprobación estricta. Esto significa que si los datos codificados en Base64 contienen caracteres que no pertenecen al alfabeto de Base64, la función de decodificación devolverá el valor FALSE. Esto es útil para verificar la integridad de la cadena codificada en Base64. Por otro lado, si deseas descartar caracteres no válidos de manera silenciosa, simplemente envía FALSE, que es el valor predeterminado.

La función devuelve la cadena decodificada si la decodificación es exitosa; de lo contrario, devuelve FALSE. Es importante tomar en cuenta que la función base64_decode puede devolver datos binarios si la cadena en cuestión estaba en formato binario antes de la codificación.

En la siguiente sección discutiremos cómo puedes usar funciones integradas de Base64 en PHP.

Cómo codificar y decodificar datos con Base64 de MIME

En esta sección analizaremos un par de ejemplos para ver las funciones de Base64 en acción.

Codifica parámetros de tipo URL

La mayoría de las veces terminarás usando la función base64_encode para codificar parámetros que contienen URL.

Veamos rápidamente cómo funciona esto con el siguiente ejemplo.

1
<?php
2
$redirectUrl = 'https://www.example.com/some/other/url';
3
4
header('Location: https://www.example.com/redirect/' . base64_encode($redirectUrl));
5
//https://www.example.com/redirect/aHR0cDovL3d3dy5leGFtcGxlLmNvbS9zb21lL290aGVyL3VybA==

6
?>

Como puedes ver, si no usamos la función base64_encode, el URL resultante se vería como https://www.example.com/redirect/https://www.example.com/some/other/url, lo que no es válido.

Suma de verificación codificada en Base64

Como discutimos anteriormente, la función base64_encode es útil al convertir datos binarios en una cadena ASCII.

Echemos un vistazo al siguiente ejemplo.

1
<?php
2
$base64_encoded_hash = base64_encode(hash_hmac('sha1', 'Source string to be hashed.', 'YOUR_TOP_SECRET_KEY', true));
3
?>

En el ejemplo anterior, la función hash_hmac devolvería datos binarios con hash. Por lo tanto, si no usas la función base64_encode sería difícil mostrar los datos binarios resultantes.

Archivos adjuntos de correos electrónicos

En PHP, cuando envías un correo electrónico con archivos adjuntos puedes codificar el contenido del archivo en el formato codificado en Base64. De hecho, si estás enviando archivos adjuntos binarios, es esencial que codifiques los datos adjuntos en lugar de enviarlos en formato sin procesar.

Echemos un vistazo al siguiente ejemplo.

1
<?php
2
$to = 'receiver@example.com';
3
$subject = 'Example of base64 encoded attachments';
4
$message = 'This email contains an image attachment.';
5
$boundary = md5(microtime());
6
7
$headers = "From: name <from@example.com>" . "\r\n";
8
$headers .= "MIME-Version: 1.0" . "\r\n";
9
$headers .= "Content-Type: multipart/mixed; boundary=" . $boundary . "\r\n";
10
$headers .= "Multipart MIME example." . "\r\n";
11
12
$message.= "--" . $boundary. "\r\n";
13
$message.= "Content-Type: text/plain; charset=\"iso-8859-1\"" . "\r\n";
14
$message.= "Content-Transfer-Encoding: 8bit" . "\r\n";
15
$message.=  $message . "\r\n";
16
17
// attach file

18
$filename = 'nature.jpg';
19
$filecontents = file_get_contents($filename);
20
$filecontents = chunk_split(base64_encode($filecontents));
21
22
$message.= "--" . $boundary. "\r\n";
23
$message.= "Content-Type: image/jpg; name=\"" . $filename . "\"" . "\r\n";
24
$message.= "Content-Transfer-Encoding: base64" . "\r\n";
25
$message.= "Content-Disposition: attachment" . "\r\n";
26
$message.= $filecontents . "\r\n";
27
$message.= "--" . $boundary. "--";
28
29
mail($mailto, $subject, $body, $headers);
30
?>

Como puedes ver, hemos usado la función base64_encode para codificar datos binarios de tipo imagen antes de enviarlos como datos adjuntos.

De esta manera puedes usar las funciones de Base64 en PHP para diversos propósitos.

Conclusión

En este artículo rápido discutimos cómo puedes usar funciones de Base64 en tu desarrollo cotidiano con PHP.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.