/*R4sLinux联盟 * code by wzt base64_encode & decodeR4sLinux联盟 */R4sLinux联盟 R4sLinux联盟 #include <stdio.h>R4sLinux联盟 #include <stdlib.h>R4sLinux联盟 #include <string.h>R4sLinux联盟 R4sLinux联盟 char base64_map[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";R4sLinux联盟 R4sLinux联盟 char base64_decode_map[256] = {R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255,R4sLinux联盟 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,R4sLinux联盟 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28,R4sLinux联盟 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,R4sLinux联盟 49, 50, 51, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,R4sLinux联盟 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255};R4sLinux联盟 R4sLinux联盟 unsigned char test[100]= "ddsfasdfd";R4sLinux联盟 unsigned char encode[100], decode[100];R4sLinux联盟 R4sLinux联盟 void base64_encode(char *src, int src_len, char *dst)R4sLinux联盟 {R4sLinux联盟 int i = 0, j = 0;R4sLinux联盟 R4sLinux联盟 for (; i < src_len - src_len % 3; i += 3) {R4sLinux联盟 dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[((src[i] << 4) | (src[i + 1] >> 4)) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[((src[i + 1] << 2) | (src[i + 2] >> 6 )) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[src[i + 2] & 0x3f];R4sLinux联盟 }R4sLinux联盟 R4sLinux联盟 if (src_len % 3 == 1) {R4sLinux联盟 dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[(src[i] << 4) & 0x3f];R4sLinux联盟 dst[j++] = '=';R4sLinux联盟 dst[j++] = '=';R4sLinux联盟 }R4sLinux联盟 else if (src_len % 3 == 2) {R4sLinux联盟 dst[j++] = base64_map[(src[i] >> 2) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[((src[i] << 4) | (src[i + 1] >> 4)) & 0x3f];R4sLinux联盟 dst[j++] = base64_map[(src[i + 1] << 2) & 0x3f];R4sLinux联盟 dst[j++] = '=';R4sLinux联盟 }R4sLinux联盟 R4sLinux联盟 dst[j] = '\0';R4sLinux联盟 }R4sLinux联盟 R4sLinux联盟 void base64_decode(char *src, int src_len, char *dst)R4sLinux联盟 {R4sLinux联盟 int i = 0, j = 0;R4sLinux联盟 R4sLinux联盟 for (; i < src_len; i += 4) {R4sLinux联盟 dst[j++] = base64_decode_map[src[i]] << 2 |R4sLinux联盟 base64_decode_map[src[i + 1]] >> 4;R4sLinux联盟 dst[j++] = base64_decode_map[src[i + 1]] << 4 |R4sLinux联盟 base64_decode_map[src[i + 2]] >> 2;R4sLinux联盟 dst[j++] = base64_decode_map[src[i + 2]] << 6 |R4sLinux联盟 base64_decode_map[src[i + 3]];R4sLinux联盟 }R4sLinux联盟 R4sLinux联盟 dst[j] = '\0';R4sLinux联盟 }R4sLinux联盟 R4sLinux联盟 int main(void)R4sLinux联盟 {R4sLinux联盟 printf("%s\n",test);R4sLinux联盟 R4sLinux联盟 base64_encode(test, strlen(test), encode);R4sLinux联盟 printf("%s\n",encode);R4sLinux联盟 R4sLinux联盟 base64_decode(encode, strlen(encode), decode);R4sLinux联盟 printf("%s\n",decode);R4sLinux联盟 R4sLinux联盟 return 0;R4sLinux联盟 }R4sLinux联盟
|