0% encontró este documento útil (0 votos)
19 vistas4 páginas

Decodificación de Cadenas Base64 en C

C

Cargado por

fallstar345
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas4 páginas

Decodificación de Cadenas Base64 en C

C

Cargado por

fallstar345
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

#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;

También podría gustarte