1 static char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2 static char base64inv[128] =
4 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62,0, 0, 0,63,
7 52,53,54,55,56,57,58,59,60,61, 0, 0, 0, 0, 0, 0,
8 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,
9 15,16,17,18,19,20,21,22,23,24,25, 0, 0, 0, 0, 0,
10 0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
11 41,42,43,44,45,46,47,48,49,50,51, 0, 0, 0, 0, 0
14 int Base64Encode(const byte * input, int len, char * encoded)
26 buffer |= (int)input[c] << 16;
28 buffer |= (int)input[c+1] << 8;
31 buffer = ((int)input[c] << 16) | ((int)input[c+1] << 8) | input[c+2];
32 encoded[encLen++] = base64digits[(buffer & 0xFC0000) >> 18];
33 encoded[encLen++] = base64digits[(buffer & 0x03F000) >> 12];
34 encoded[encLen++] = (remaining >= 2) ? base64digits[(buffer & 0x000FC0) >> 6] : '=';
35 encoded[encLen++] = (remaining >= 3) ? base64digits[(buffer & 0x00003F)] : '=';
42 int Base64Decode(const byte * input, int len, byte * decoded)
49 buffer = ((int)base64inv[input[c]] << 18) | ((int)base64inv[input[c+1]] << 12) | ((int)base64inv[input[c+2]] << 6) | ((int)base64inv[input[c+3]]);
51 decoded[decLen++] = (byte)((buffer & 0xFF0000) >> 16);
56 decoded[decLen++] = (byte)((buffer & 0x00FF00) >> 8);
58 decoded[decLen++] = (byte)(buffer & 0x0000FF);
63 decoded[decLen++] = (byte)((buffer & 0x00FF00) >> 8);
64 decoded[decLen++] = (byte)(buffer & 0x0000FF);