Chinaunix首页 | 论坛 | 博客
  • 博客访问: 125779
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-01 15:34
个人简介

不晓得说啥子

文章分类

全部博文(42)

文章存档

2015年(41)

2014年(1)

我的朋友

分类: C/C++

2015-04-03 09:36:33

 根据base64编码原理 ,解码相对也很简单,需要用一个辅助函数来得到base64编码中对应的码值

Base64编码表

码值 字符   码值 字符   码值 字符   码值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
char GetBase64Value(char ch) //得到编码值
{
         if ((ch >= 'A') && (ch <= 'Z'))  // A ~ Z
                return ch - 'A';
         if ((ch >= 'a') && (ch <= 'z'))  // a ~ z
                 return ch - 'a' + 26;
         if ((ch >= '0') && (ch <= '9'))  // 0 ~ 9
                 return ch - '0' + 52;
         switch (ch)       // 其它字符
         {
                 case '+':
                 return 62;
                 case '/':
                 return 63;
                 case '=':  //Base64 填充字符
                 return 0;
                 default:
                 return 0;
         }
 }


int base64_decode( char *gb2312string, char *base64string, int base64_len)  //解码函数
 {
         int     count = 0;
         int     index = base64_len-1;
         uint_8  Base64Encode[4];
         int gb2312stringlen=0;
         while(base64string[index] == '=') {
                 
                 count++;
                 index--;
         }
         if( base64_len % 4  )   //如果不是 4 的倍数,则 Base64 编码有问
         {
                 gb2312string[0] = '\0';
                 return -1;
         }
 
         while( base64_len > 3 )  //当待解码个数不足4个时,将忽略它
         {
             //  取出base64编码中的四个字符, 然后通过一个函数得每个字符对应的码值 ,再进行相应的移位操作就可以得到原始编码

                 Base64Encode[0] = GetBase64Value(base64string[0]);
                 Base64Encode[1] = GetBase64Value(base64string[1]);
                 Base64Encode[2] = GetBase64Value(base64string[2]);
                 Base64Encode[3] = GetBase64Value(base64string[3]);

                 *gb2312string ++ = (Base64Encode[0] << 2) | (Base64Encode[1] >> 4);
                 *gb2312string ++ = (Base64Encode[1] << 4) | (Base64Encode[2] >> 2);
                 *gb2312string ++ = (Base64Encode[2] << 6) | (Base64Encode[3]);
 
                 base64string += 4;
                 base64_len -= 4;
                 gb2312stringlen += 3;
         }
         return gb2312stringlen - count;
 }

阅读(1465) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~