#include <stdio.
h>
#include <stdlib.h>
#include <string.h>
// Tabla Base64
Const char BASE64_CHARS[] =
“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345
6789+/”;
// Función para encontrar el índice de un carácter en la tabla Base64
Int base64_char_to_value(char c) {
Const char *ptr = strchr(BASE64_CHARS, c);
If (ptr) {
Return ptr – BASE64_CHARS;
Return -1; // Carácter no encontrado
// Función para decodificar una cadena Base64
Void decode_base64(const char *base64String) {
Int len = strlen(base64String);
Int padding = 0;
// Contar el relleno ‘=’
If (base64String[len – 1] == ‘=’) padding++;
If (base64String[len – 2] == ‘=’) padding++;
// Calcular el tamaño del buffer de salida
Int outputLen = (len * 3) / 4 – padding;
Unsigned char *decodedBytes = (unsigned char *)malloc(outputLen);
// Decodificar la cadena Base64
Int i, j;
For (i = 0, j = 0; i < len;) {
Int val = base64_char_to_value(base64String[i++]) << 18 |
Base64_char_to_value(base64String[i++]) << 12 |
Base64_char_to_value(base64String[i++]) << 6 |
Base64_char_to_value(base64String[i++]);
If (j < outputLen) decodedBytes[j++] = (val >> 16) & 0xFF;
If (j < outputLen) decodedBytes[j++] = (val >> 8) & 0xFF;
If (j < outputLen) decodedBytes[j++] = val & 0xFF;
// Mostrar cada paso del proceso
Printf(“Cadena Base64: %s\n”, base64String);
Printf(“Decodificación paso a paso:\n”);
For (i = 0; i < len; i++) {
If (base64String[i] ¡= ‘=’) { // Ignorar el relleno
Int decimalValue = base64_char_to_value(base64String[i]);
Char binaryValue[7];
Snprintf(binaryValue, 7, “%06d”, decimalValue);
Printf(“Carácter Base64: %c | Decimal: %d | Binario: %s\n”,
base64String[i], decimalValue, binaryValue);
}
// Mostrar los bytes decodificados y los caracteres ASCII extendidos
Printf(“\nCadena Decodificada: %s\n”, decodedBytes);
Printf(“Caracteres ASCII Extendido:\n”);
For (i = 0; i < outputLen; i++) {
Printf(“Byte: %d | Carácter ASCII Extendido: %c\n”,
decodedBytes[i], decodedBytes[i]);
Free(decodedBytes);
Int main() {
Char base64String[256];
// Solicitar al usuario que ingrese una cadena Base64
Printf(“Ingrese una cadena Base64: “);
Fgets(base64String, sizeof(base64String), stdin);
// Eliminar el salto de línea al final de la cadena
Base64String[strcspn(base64String, “\n”)] = ‘\0’;
// Decodificar la cadena Base64
Decode_base64(base64String);
Return 0;