Resultados 1 al 3 de 3

C Base64 problemas con binarios

  1. #1 C Base64 problemas con binarios 
    Iniciado
    Fecha de ingreso
    Feb 2010
    Mensajes
    3
    Descargas
    0
    Uploads
    0
    Hola mi intención es cargar en una variable de C un fichero binario en Base64 , os cuento mi hazaña y mis frikadas:

    imaginemos que tenemos un binario ( un ejecutable , una dll , una imagen , un fichero tipo mp3 , video etc .... ) y quiero matenerlo en mi ejecutable en una variable.

    Para eso uso la Base64

    es decir abro el fichero en modo binario por ejemplo:

    FILE *binario = fopen( "fichero.mp3", "rb");

    leo 32 bytes con fread

    los encripto en Base64 llamando a una función para ese cometido

    desencripto otra vez la cadena

    y lo guardo en un fichero en modo binario

    ahora escucho el mp3 y no hay problema ( BIEN al menos el algoritmo que uso
    para encriptar y desencriptar esta bien ya que encripto el mp3 en B64 lo desencripto y lo guardo
    en otro fichero llamado salida.mp3 y se escucha )


    SIGAMOS............ ................... ................... ................... ................... ...

    el contenido del mp3 lo encripto en base64 quedando algo asi:

    UklGRiRwAQBXQVZFZm1 0IBAAAAABAAEARKwAAI hYAQA=AgAQAGRhdGEAcAEAzP2y/Zb9rv3M/Xz9af0Y/n3/0AA=awGYAfABbQKtArwC1AILAzYDRQ

    luego lo guardo en un fichero en modo binario llamado encode_mp3

    copio el contenido y luego lo pego en una variable de C como sigue aquí:

    unsigned char [] = "UklGRiRwAQBXQVZFZm1 0IBAAAAABAAEARKwAAI hYAQA=AgAQAGRhdGEAcAEAzP2y/Zb9rv3M/Xz9af0Y/n3/0AA=awGYAfABbQKtArwC1AILAzYDRQ ................... ............ ";

    ahora escribo esta variable desencriptandola y guardo como salida.mp3 y nada el binario queda corrupto. y encima a veces ocupa menos que el mp3 original.

    Supongo que es por alguna conversión extraña a ASCII o algo asi......

    ¿alguna sugerencia ?

    ¿estoy haciendo algo mal?

    ¿esto se puede hacer de alguna otra forma ?

    ¿algun libro , tutorial , website que me de información como hacer esto ?

    Un saludo a todos.
    Citar  
     

  2. #2  
    Avanzado
    Fecha de ingreso
    Jan 2004
    Ubicación
    Donde me dejan
    Mensajes
    433
    Descargas
    7
    Uploads
    0
    unsigned char [] = "UklGRiRwAQBXQVZFZm1 0IBAAAAABAAEARKwAAI hYAQA=AgAQAGRhdGEAcAEAzP2y/Zb9rv3M/Xz9af0Y/n3/0AA=awGYAfABbQKtArwC1AILAzYDRQ ................... ............ ";
    Por que unsigned char?? debería funcionar con char simplemente no?

    Saludos
    El mejor maestro es uno mismo, aun que siempre va bien una ayudita
    Citar  
     

  3. #3  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    No se puede hacer como contás que haces, por que pueden haber caracteres de control y/o caracteres no imprimibles que traen problemas, por ejemplo que pasa si la cadena encriptada tiene comillas <"> ?.

    Para podrías o bien leer desde un archivo con las funciones de la libreria estandar, o si querés guardar la cadena dentro del ejecutable, guardar los valores numéricos de los bytes del archivo.
    Para esto tendrías que crearte un programita que te devuelva la cadena lista para usar.

    Por ejemplo:
    Código:
    #include <stdio.h>
    
    int main(int c,char** v)
    {
      char buffer[4096];
      int lb,i;
      FILE *fd;
      if(c<=1) return -1;
      lb = 10;
      if((fd = fopen(v[1],"rb"))==NULL) return;
      lb = fread(buffer,1,sizeof(buffer),fd);
      printf("{");
      for(i=0;i<lb-1;i++)
        printf("%d,",(int)*((char*)(buffer+i)));
      printf("%d}\n",(int)*((char*)(buffer+lb-1)));
      fclose(fd);
      return 0;
    }
    ahora si lo compilas con nombre "dameLista" lo llamarias:
    $ ./dameLista nombre_fichero > fichero.out

    de forma que la salida te la deje en el archivo fichero.out

    La salida va a tener la forma:

    {byte1,byte2, ..... ,byteN}

    donde byte1,byte2,.... son numeros decimales.


    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

Temas similares

  1. Archivos binarios
    Por pax en el foro GENERAL
    Respuestas: 2
    Último mensaje: 28-03-2006, 17:32
  2. Compilar Binarios
    Por CLF en el foro LINUX - MAC - OTROS
    Respuestas: 1
    Último mensaje: 06-03-2006, 18:11
  3. Punteros para ficheros binarios en C++
    Por Dwarft en el foro PROGRAMACION DESKTOP
    Respuestas: 1
    Último mensaje: 04-08-2004, 14:42
  4. Imagenes y ficheros binarios
    Por alcaide en el foro GENERAL
    Respuestas: 0
    Último mensaje: 26-03-2003, 09:51
  5. Descifrar Base64
    Por Pretomor en el foro GENERAL
    Respuestas: 10
    Último mensaje: 02-07-2002, 13:49

Etiquetas para este tema

Marcadores

Marcadores