Base64Decode 和Base64Encode


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;
}

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM