Base64 algorithm implementation

xiaoxiao2021-03-06  40

INTBASE64_ENCODE (Unsigned Char * OUT, Unsigned Char * in, int size) {register int position = 0; register unsigned char * dst = OUT, * SRC = in

IN = size; while (src > 2; position; break; case 1: * dst = ((SRC [0] & 3) << 4) | (SRC [1] >> 4); src; position; break; case 2: * dst = ((SRC [0] & 0xF) << 2) | (src [ 1] >> 6); src; position; Break; Case 3: * DST = src [0] & 0x3f; src; position = 0; Break;} DST;}

For (src = out; src

IF (Position) for (; Position <4; * DST = '='); * DST = '/ 0';

Return Dst - Out;} static unsigned char map [256] = {0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF , 0x3e, 0x3f, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02 , 0x03, 0x04, 0x05, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x16, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xf, 0xFF 0xFF, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x29, 0x27, 0x2, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e 0x2F, 0x30, 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0 XFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

INTBASE64_DECode (unsigned char * out, unsigned char * in) {register unsigned char ch, * DST = OUT; for (Bytes = 0; (CH = * in ) && ch! = '='; bytes ) {IF ((CH = MAP [CH]) == 0xFF) {RETURN-1;} Switch (Bytes & 3) {case 0: * DST = CH << 2; Break; Case 1: * DST | = CH >> 4); * DST = (CH & 0xF) << 4; Break; * DST = (CH & 0xF) << 4; Break; Case 2: * DST | = (CH >> 2); * DST = CH << 6; Break; case 3: * DST | = CH; Break;}}} (bytes & 3 == 1) {RETURN -1;}

Return (Bytes >> 2) * 3 "/ x0 / x1 / x1 / x2" [bytes & 3];

转载请注明原文地址:https://www.9cbs.com/read-67490.html

New Post(0)