首页 > Web开发 > 详细

Base64Decode 和Base64Encode

时间:2016-04-07 18:33:01      阅读:261      评论:0      收藏:0      [点我收藏+]
int Base64Encode( char *OrgString, char *Base64String, int OrgStringLen )
{
// OrgString 待编码字符串指针
// Base64String 保存编码结果字符串指针
// OrgStringLen 待编码字符串长度
static char Base64Encode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int Base64StringLen = 0;

while( OrgStringLen > 0 )
{
	   *Base64String ++ = Base64Encode[(OrgString[0] >> 2 ) & 0x3f];
	   if( OrgStringLen > 2 )
	   {
			*Base64String ++ = Base64Encode[((OrgString[0] & 3) << 4) | (OrgString[1] >> 4)];
			*Base64String ++ = Base64Encode[((OrgString[1] & 0xF) << 2) | (OrgString[2] >> 6)];
			*Base64String ++ = Base64Encode[OrgString[2] & 0x3F];
	   }
	   else
	   {
			switch( OrgStringLen )
			{
				case 1:
					*Base64String ++ = Base64Encode[(OrgString[0] & 3) << 4 ];
					*Base64String ++ = ‘=‘;
					*Base64String ++ = ‘=‘;
					break;
				case 2:
					*Base64String ++ = Base64Encode[((OrgString[0] & 3) << 4) | (OrgString[1] >> 4)];
					*Base64String ++ = Base64Encode[((OrgString[1] & 0x0F) << 2) | (OrgString[2] >> 6)];
					*Base64String ++ = ‘=‘;
					break;
			}
	   }
	  
	   OrgString +=3;
	   OrgStringLen -=3;
	   Base64StringLen +=4;
	}

	*Base64String = 0;
	return Base64StringLen;
}


/////////////////////////////////////////////////////////////
//	解码函数,数据库的用户名被base64编码	    
/////////////////////////////////////////////////////////////
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 Base64Decode( char *OrgString, char *Base64String, int Base64StringLen, bool bForceDecode )  //解码函数
{
 //OrgString 保存解码结果字符串指针
 // Base64String 待解码字符串指针
 // Base64StringLen 待解码字符串长度
 // bForceDecode 当待解码字符串长度错误时,是否强制解码
 //     true  强制解码
 //     false 不强制解码
	if( Base64StringLen % 4 && !bForceDecode )   //如果不是 4 的倍数,则 Base64 编码有问题
	{
		OrgString[0] = ‘\0‘;	
		return -1;
	}
	
	unsigned char Base64Encode[4];
	int OrgStringLen=0;

	while( Base64StringLen > 2 )  //当待解码个数不足3个时,将忽略它(强制解码时有效)
	{
		Base64Encode[0] = GetBase64Value(Base64String[0]);
		Base64Encode[1] = GetBase64Value(Base64String[1]);
		Base64Encode[2] = GetBase64Value(Base64String[2]);
		Base64Encode[3] = GetBase64Value(Base64String[3]);

		*OrgString ++ = (Base64Encode[0] << 2) | (Base64Encode[1] >> 4);
		*OrgString ++ = (Base64Encode[1] << 4) | (Base64Encode[2] >> 2);
		*OrgString ++ = (Base64Encode[2] << 6) | (Base64Encode[3]);
		    
		Base64String += 4;
		Base64StringLen -= 4;
		OrgStringLen += 3;
	}
		return OrgStringLen;
}

  网上也有类似的代码,但有些不能用,这个是备份的,用时方便

Base64Decode 和Base64Encode

原文:http://www.cnblogs.com/wangxuetong/p/5364735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!