//Base64编码类。///将byte[]类型转换成Base64编码的string类型。///publicclassBase64Encoder
{byte[] source;intlength, length2;intblockCount;intpaddingCount;publicstaticBase64Encoder Encoder=newBase64Encoder();publicBase64Encoder()
{
}privatevoidinit(byte[] input)
{
source=input;
length=input.Length;if((length%3)==0)
{
paddingCount=0;
blockCount=length/3;
}else{
paddingCount=3-(length%3);
blockCount=(length+paddingCount)/3;
}
length2=length+paddingCount;
}publicstringGetEncoded(byte[] input)
{//初始化init(input);byte[] source2;
source2=newbyte[length2];for(intx=0; x
{if(x
{
source2[x]=source[x];
}else{
source2[x]=0;
}
}byteb1, b2, b3;bytetemp, temp1, temp2, temp3, temp4;byte[] buffer=newbyte[blockCount*4];char[] result=newchar[blockCount*4];for(intx=0; x
{
b1=source2[x*3];
b2=source2[x*3+1];
b3=source2[x*3+2];
temp1=(byte)((b1&252)>>2);
temp=(byte)((b1&3)<<4);
temp2=(byte)((b2&240)>>4);
temp2+=temp;
temp=(byte)((b2&15)<<2);
temp3=(byte)((b3&192)>>6);
temp3+=temp;
temp4=(byte)(b3&63);
buffer[x*4]=temp1;
buffer[x*4+1]=temp2;
buffer[x*4+2]=temp3;
buffer[x*4+3]=temp4;
}for(intx=0; x
{
result[x]=sixbit2char(buffer[x]);
}switch(paddingCount)
{case0:break;case1: result[blockCount*4-1]='=';break;case2: result[blockCount*4-1]='=';
result[blockCount*4-2]='=';break;default:break;
}returnnewstring(result);
}privatecharsixbit2char(byteb)
{char[] lookupTable=newchar[64]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'};if((b>=0)&&(b<=63))
{returnlookupTable[(int)b];
}else{return'';
}
}
}