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