分享
 
 
 

C# 实现Base64的编码\解码

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

编码类

using System;

namespace WebApplication1

{

/// <summary>

/// Base64Encoder 的摘要说明

/// 说明:Base编码类

/// 写作者:Quentin

/// </summary>

public class Base64Encoder

{

byte[] source;

int length,length2;

int blockCount;

int paddingCount;

public Base64Encoder()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public Base64Encoder(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;

}

public char[] GetEncoded()

{

byte[] source2;

source2=new byte[length2];

for (int x=0; x<length2;x++)

{

if (x<length)

{

source2[x]=source[x];

}

else

{

source2[x]=0;

}

}

byte b1, b2, b3;

byte temp, temp1, temp2, temp3, temp4;

byte[] buffer=new byte[blockCount*4];

char[] result=new char[blockCount*4];

for (int x=0;x<blockCount;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 (int x=0; x<blockCount*4;x++)

{

result[x]=sixbit2char(buffer[x]);

}

switch (paddingCount)

{

case 0:break;

case 1:result[blockCount*4-1]='=';break;

case 2:result[blockCount*4-1]='=';

result[blockCount*4-2]='=';

break;

default:break;

}

return result;

}

private char sixbit2char(byte b)

{

char[] lookupTable=new char[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))

{

return lookupTable[(int)b];

}

else

{

return ' ';

}

}

}

}

解码类

using System;

namespace WebApplication1

{

/// <summary>

/// Base64Decoder 的摘要说明。

/// 说明:Base编码类

/// 写作者:Quentin

/// </summary>

public class Base64Decoder

{

char[] source;

int length, length2, length3;

int blockCount;

int paddingCount;

public Base64Decoder()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

public Base64Decoder(char[] input)

{

int temp=0;

source=input;

length=input.Length

for (int x=0;x<2;x++)

{

if(input[length-x-1]=='=')

temp++;

}

paddingCount=temp;

blockCount=length/4;

length2=blockCount*3;

}

public byte[] GetDecoded()

{

byte[] buffer=new byte[length];

byte[] buffer2=new byte[length2];

for(int x=0;x<length;x++)

{

buffer[x]=char2sixbit(source[x]);

}

byte b, b1,b2,b3;

byte temp1, temp2, temp3, temp4;

for(int x=0;x<blockCount;x++)

{

temp1=buffer[x*4];

temp2=buffer[x*4+1];

temp3=buffer[x*4+2];

temp4=buffer[x*4+3];

b=(byte)(temp1<<2);

b1=(byte)((temp2 & 48)>>4);

b1+=b;

b=(byte)((temp2 & 15)<<4);

b2=(byte)((temp3 & 60)>>2);

b2+=b;

b=(byte)((temp3 & 3)<<6);

b3=temp4;

b3+=b;

buffer2[x*3]=b1;

buffer2[x*3+1]=b2;

buffer2[x*3+2]=b3;

}

length3=length2-paddingCount;

byte[] result=new byte[length3];

for(int x=0;x<length3;x++)

{

result[x]=buffer2[x];

}

return result;

}

private byte char2sixbit(char c)

{

char[] lookupTable=new char[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(c=='=')

return 0;

else

{

for (int x=0;x<64;x++)

{

if (lookupTable[x]==c)

return (byte)x;

}

return 0;

}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有