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;
}
網上也有類似的代碼,但有些不能用,這個是備份的,用時方便
