110,546
社区成员
发帖
与我相关
我的任务
分享
void CClientRegicode::EncodeBase64MSG(char *Src,int Src_len,char *base64code)
{
int len,i,work_Len;
unsigned char* psrc ;
unsigned char Beign;
unsigned char rest ;
const char szBase64TableOld2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //$ 标准
const char szBase64TableOld [] = {'P','Q','R','S','T','U','a','b','c','d','e','f','g','h','A','B','C','D','E','K','L','M','y','z',
'0','1','N','O','V','W','X','Y','Z','i','j','k','q','r','s','5','6','7','8','9','t','u','v','w',
'x','2','3','4','+','/','F','G','H','I','J','l','m','n','o','p'}; //- * 变化
char szBase64Table [] = {'P','Q','R','S','T','U','a','b','c','d','e','f','g','h','A','B','C','D','E','K','L','M','y','z',
'0','1','N','O','V','W','X','Y','Z','i','j','k','q','r','s','5','6','7','8','9','t','u','v','w',
'x','2','3','4','+','/','F','G','H','I','J','l','m','n','o','p'}; //- * 变化
work_Len = Src_len;
if (Src[4]=='-'||Src[4]=='*'||Src[4]=='$')
{
psrc = (unsigned char*)&Src[5]; work_Len=work_Len-5;
*base64code=Src[0];base64code++;
*base64code=Src[1];base64code++;
*base64code=Src[2];base64code++;
*base64code=Src[3];base64code++;
*base64code=Src[4];base64code++;
i=atoi(Src) % 63;
if (i!=0)
{
if (Src[4]=='$')
{
memcpy(szBase64Table ,&szBase64TableOld2[i],64-i);
memcpy(&szBase64Table[64-i],szBase64TableOld2 ,i);
}
else
{
memcpy(szBase64Table ,&szBase64TableOld[i],64-i);
memcpy(&szBase64Table[64-i],szBase64TableOld ,i);
}
}
if (Src[4]=='*')
{
char buf[3];buf[2]=0;
len =1;*psrc++;
for (i = 1; i < work_Len ; i=i+2)
{
memcpy(buf,&Src[5+i],2);
*psrc=(unsigned char) (strtoul(buf,NULL,16));
*psrc++;
len++;
}
psrc = (unsigned char*)&Src[5];
work_Len=len;
}
}
else
psrc = (unsigned char*)Src;
rest=0;
Beign=0;
len = 0;
for (i = 0; i < work_Len ; i ++)
{
do
{
*base64code=szBase64Table[ ( Beign<<(6-rest) | *psrc>>(2+rest))&0x3f];
base64code++;
len++;
Beign=*psrc;
rest+=2;
if (rest==8)
{
rest=0;
}
} while (rest>=6);
psrc++;
}
if (rest!=0)
{
*base64code=szBase64Table[ ( Beign<<(6-rest) )&0x3f];
base64code++;
len++;
}
if (((len/4)*4)!=len)
for (i=0;i<((len/4)+1)*4-len;i++)
{
*base64code='=';
base64code++;
}
*base64code = '\0';
}
using System.Runtime.InteropServices;
using System.Security;
namespace System
{
//
// 摘要:
// 将一个基本数据类型转换为另一个基本数据类型。
public static class Convert
//
// 摘要:
// 将 8 位无符号整数的数组转换为其用 Base64 数字编码的等效字符串表示形式。
//
// 参数:
// inArray:
// 一个 8 位无符号整数数组。
//
// 返回结果:
// inArray 的内容的字符串表示形式,以 Base64 表示。
//
// 异常:
// T:System.ArgumentNullException:
// inArray 为 null。
public static string ToBase64String(byte[] inArray);