/*----------------------------------------------------*/ /* b64encode.c -- Base64-Encoding Filter */ /*----------------------------------------------------*/ /* Usage: */ /* b64encode [infile] > */ /* infile: filename of the file to be encoded */ /* (if omitted, input from stdin) */ /* result(stdout) should be redirected to */ /*----------------------------------------------------*/ #include #include #include int main(int argc, char *argv[]) { int c, c1, c2, k=0, n=0; char b64[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; FILE *fp; # ifdef O_BINARY setmode(1,O_BINARY); # endif if (argc == 1) { fp = stdin; # ifdef O_BINARY setmode(0,O_BINARY); # endif } else if ((fp=fopen(argv[1],"rb")) == NULL) { fprintf(stderr, "file %s not found\n", argv[1]); exit(1); } while ((c=getc(fp)) != EOF) { if (k == 0) { c2 = (c & 0xFC) >> 2; putchar(b64[c2]); c1 = (c & 0x03) << 4; k++; } else if (k == 1) { c2 = (c & 0xF0) >> 4; putchar(b64[c1|c2]); c1 = (c & 0x0F) << 2; k++; } else if (k == 2) { c2 = (c & 0xC0) >> 6; putchar(b64[c1|c2]); c1 = (c & 0x3F); putchar(b64[c1]); n++; k = 0; } if (n > 18) { putchar('\n'); n = 0; } } if (k != 0) { putchar(b64[c1]); putchar('='); if (k == 1) putchar('='); n++; } if (n != 0) putchar('\n'); fclose(fp); return(0); }