天天看点

c# java base64编码解码_C#实现Base64编码与解码

//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'';

}

}

}