encode base 64


Ce petit programme permet de faire la conversion pour trouver le fichier encodé. Il s'utilise de la façon suivante:
enc64 <fichiersource> [<fichierdestination>]
#include <stdio.h>

#define b(a) (((a)>=0 && (a)<=25)?((a)+'A'):
              (((a)>=26 && (a)<=51)?((a)-26+'a'):
               (((a)>=52 && (a)<=61)?((a)-52+'0'):
                (((a)==62)?('+'):
                 (((a)==63)?('/'):('='))
                )
               )
              )
             )

int main ( int argc, char *argv[] ) {

  FILE *f, *g;
  unsigned char buff[3];
  int i=0;

  if ( !(f = fopen(argv[1],"r"))) f = stdin ;
  if ( !(g = fopen(argv[2],"w"))) g = stdout;

  buff[0] = buff[1] = buff[2] = 0;

  while ( ( i = fread(buff,1,3,f) ) > 0 ) {
    fprintf(g,"%c",b(buff[0]>>2) );
    fprintf(g,"%c",b(((buff[0] & 0x3) << 4) | buff[1] >> 4 ) );
    if ( i > 1 ) {
      fprintf(g,"%c",b(((buff[1] & 0xF) << 2) | buff[2] >> 6 ) );
      if ( i > 2 ) {
        fprintf(g,"%c",b(buff[2] & 0x3F ) );
      } else
        fprintf(g,"=");
    } else
        fprintf(g,"==");

    buff[0] = buff[1] = buff[2] = 0;
  }

  fclose(f);
  fclose(g);

  return 0;

}