Author: JsuFcz
/ * Base64 encoding function * / int base64 (char * s, char * d) {char charset [64] = {'a', 'b', 'c', 'd', 'e', 'f', 'G', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's ',' T ',' u ',' V ',' W ',' X ',' Y ',' Z ',' A ',' B ',' C ',' D ',' E ', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'R ',' s', 't', 'u', 'v', 'w', 'x', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '/'}; Unsigned Char in [3]; Unsigned Char Out [4]; int CNT = 0; if (! S ||! D) return 0; for (; * s! = 0;) {IF (CNT 4> 76) {* D = '/ n'; CNT = 0;} (s)> = 3) {IN [0] = * S; IN [1] = * (S 1); in [2] = * (S 2); OUT [0] = in [0]> > 2; OUT [1] = (in [0] & 0x03) << 4 | (in [1] & 0xF0) >> 4; OUT [2] = (in [1] & 0x0f) << 2 | (in [2) ] & 0xc0) >> 6; OUT [3] = IN [2] & 0x3f; * d = charset [out [0]]; * (D 1) = charset [out [1]]; * (D 2) = Charset [OUT [2]]; * (D 3) = charset [OUT [3]]; S = 3; D = 4;} else IF (Strlen (S) == 1) {IN [0] = * S; OUT [0] = IN [0] >> 2; OUT [1] = (in [0] & 0x03) << 4 | 0; * D = charset [out [0]]; * (D 1 ) = Charset [OUT [1]]; * (D 2) = '='; * (D 3) = '='; s = 1; D = 4;} else if (Strlen (s) == 2) {IN [0] = * S; IN [1] = * (S 1); OUT [0] = in [0] >> 2; OUT [1] =
(In [0] & 0x03) << 4 | (in [1] & 0xF0) >> 4; OUT [2] = (in [1] & 0x0f) << 2 | 0; * D = charset [out [0]] ; * (D 1) = charset [OUT [1]]; * (D 2) = charset [OUT [2]]; * (D 3) = '='; s = 2; D = 4; } CNT = 4;} * D = '/ 0'; return 1;} / * base64 decoding function * / int unbase64char (char cha) {char charset [64] = {'a', 'b', 'c' , 'D', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', ' P ',' Q ',' R ',' S ',' T ',' U ',' V ',' W ',' X ',' Y ',' Z ',' A ',' B ' , 'c', 'd', 'e', 'f', 'g', 'h', 'I', 'J', 'K', 'L', 'M', 'N', ' O ',' p ',' q ',' r ',' s', 't', 'u', 'V', 'W', 'X', 'Y', 'Z', '0' , '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ', '/'}; INT I; For (i = 0; i <= 63; i ) IF (Charset [i] == CH) Break; returnix i;} int unbase64 (char * s, char * d) {UNSIGNED Char in [4]; unsigned char OUT [3]; if (! S ||! D) return 0; for (; * s! = 0;) {if (* s == '/ n') s ; in [0] = s [0]; In [1] = S [1]; IN [2] = S [2]; IN [3] = s [3]; if (in [2]! = '=' && in [3]! = '=' ) {In [0] = unbase64char (in [0]); in [1] = unbase64char (in [1]); in [2] = unbase64char (in [2]); in [3] = unbase64char (in [3] = UNBASE64CHAR (IN [ 3]); OUT [0] = IN [0] << 2 | (in [1] & 0x30) >> 4; OUT [1] = (in [1] & 0x0f) << 4 | (in [2] & 0x3c ) >> 2; OUT [2] = (in [2] & 0x03) <<
6 | IN [3] & 0x3f; D [0] = OUT [0]; D [1] = OUT [1]; D [2] = OUT [2]; s = 4; D = 3;} else IF In [2] == '=' && in [3] == '=') {in [0] = UNBASE64CHAR (in [0]); in [1] = unbase64char (in [1]); out [0] = IN [0] << 2 | (IN [1] & 0x30) >> 4; D [0] = OUT [0]; s = 4; D = 1;} else if (in [2]! = '= '&& in [3] ==' = ') {in [0] = UNBASE64CHAR (in [0]); in [1] = unbase64char (in [1]); in [2] = unbase64char (in [2]) OUT [0] = IN [0] << 2 | (in [1] & 0x30) >> 4; OUT [1] = (in [1] & 0x0f) << 4 | (in [2] & 0x3c) >> 2; D [0] = OUT [0]; D [1] = OUT [1]; S = 4; D = 2;}} * D = '/ 0'; return 1;} / * Unencode URL encoding function * // * Here, it should be noted here that the compiler will automatically read one or two characters according to the bit 7 of the character, which can be forced to read a character using unsigned char * based on the bit 7 of the character.