decode base 64


Le système base64 encoding consiste à encoder 3 octets dans 4 pour que chaque octet ne contienne que 6 bits significatifs. ce petit programme permet de faire la conversion pour retrouver le fichier d'origine. Il s'utilise de la façon suivante:
base64 <fichiersource> [<fichierdestination>]
#include <stdio.h>

#define b(a) ((a>='A'&& a<='Z')?(a-65):\
              ((a>='a' && a<='z')?(a-71):\
               ((a>='0' && a<='9')?(a+4):\
                ((a=='+')?(62):\
                 ((a=='/')?(63):(0))\
                )\
               )\
              )\
             )

#define isEnd(a) if ( a == '=' ) break;

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

  FILE *f, *g;
  unsigned char buff[4];

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


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

  fclose(f);
  fclose(g);

  return 0;

}