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