编码及其作用.docx_第1页
编码及其作用.docx_第2页
编码及其作用.docx_第3页
编码及其作用.docx_第4页
编码及其作用.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。它使用下面表中所使用的字符与编码。而且base64特别适合在http,mime协议下快速传输数据。base64其实不是安全领域下的加密解密算法。虽然有时候经常看到所谓的base64加密解密。其实base64只能算是一个编码算法,对数据内容进行编码来适合传输。虽然base64编码过后原文也变成不能看到的字符格式,但是这种方式很初级,很简单。Base64编码方法要求把每三个8Bit的字节转换为四个6Bit的字节,其中,转换之后的这四个字节中每6个有效bit为是有效数据,空余的那两个 bit用0补上成为一个字节。因此Base64所造成数据冗余不是很严重,Base64是当今比较流行的编码方法,因为它编起来速度快而且简单举个例子,有三个字节的原始数据:aaaaaabbbbbbcccccccdddddd(这里每个字母表示一个bit位)那么编码之后会变成:00aaaaaa00bbbbbb00cccccc00dddddd所以可以看出base64编码简单,虽然编码后不是明文,看不出原文,但是解码也很简单一、编码规则Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个 “=”。例:将对ABC进行BASE64编码:1、首先取ABC对应的ASCII码值。A(65)B(66)C(67);2、再取二进制值A(01000001)B(01000010)C(01000011);3、然后把这三个字节的二进制码接起来(010000010100001001000011);4、 再以6位为单位分成4个数据块,并在最高位填充两个0后形成4个字节的编码后的值,(00010000)(00010100)(00001001)(00000011),其中蓝色部分为真实数据;5、再把这四个字节数据转化成10进制数得(16)(20)(9)(3);6、最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这里的值实际就是数据在字符表中的索引。注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/二、解码规则解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。三、C#中的实现编码类:/ / Base64编码类。/ 将byte类型转换成Base64编码的string类型。/ public class Base64Encoderbyte source;int length, length2;int blockCount;int paddingCount;public static Base64Encoder Encoder = new Base64Encoder();public Base64Encoder()private void init(byte input)source = input;length = input.Length;if (length % 3) = 0)paddingCount = 0;blockCount = length / 3;elsepaddingCount = 3 - (length % 3);blockCount = (length + paddingCount) / 3;length2 = length + paddingCount;public string GetEncoded(byte input)/初始化init(input);byte source2;source2 = new bytelength2;for (int x = 0; x length2; x+)if (x length)source2x = sourcex;elsesource2x = 0;byte b1, b2, b3;byte temp, temp1, temp2, temp3, temp4;byte buffer = new byteblockCount * 4;char result = new charblockCount * 4;for (int x = 0; x 2);temp = (byte)(b1 & 3) 4);temp2 += temp;temp = (byte)(b2 & 15) 6);temp3 += temp;temp4 = (byte)(b3 & 63);bufferx * 4 = temp1;bufferx * 4 + 1 = temp2;bufferx * 4 + 2 = temp3;bufferx * 4 + 3 = temp4;for (int x = 0; x = 0) & (b = 63)return lookupTable(int)b;elsereturn ;解码类:/ / Base64解码类/ 将Base64编码的string类型转换成byte类型/ public class Base64Decoderchar source;int length, length2, length3;int blockCount;int paddingCount;public static Base64Decoder Decoder = new Base64Decoder();public Base64Decoder()private void init(char input)int temp = 0;source = input;length = input.Length;for (int x = 0; x 2; x+)if (inputlength - x - 1 = =)temp+;paddingCount = temp;blockCount = length / 4;length2 = blockCount * 3;public byte GetDecoded(string strInput)/初始化init(strInput.ToCharArray();byte buffer = new bytelength;byte buffer2 = new bytelength2;for (int x = 0; x length; x+)bufferx = char2sixbit(sourcex);byte b, b1, b2, b3;byte temp1, temp2, temp3, temp4;for (int x = 0; x blockCount; x+)temp1 = bufferx * 4;temp2 = bufferx * 4 + 1;temp3 = bufferx * 4 + 2;temp4 = bufferx * 4 + 3;b = (byte)(temp1 4);b1 += b;b = (byte)(temp2 & 15) 2);b2 += b;b = (byte)(temp3 & 3) 6);b3 = temp4;b3 += b;buffer2x * 3 = b1;buffer2x * 3 + 1 = b2;buffer2x * 3 + 2 = b3;length3 = length2 - paddingCount;byte result = new bytelength3;for (int x = 0; x length3; x+)resultx = buffer2x;return result;private byte char2sixbit(char c)char lookupTable = new char64 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;elsefor (int x = 0; x 64; x+)if (lookupTablex = c)return (byte)x;return 0;/解码类结束提示:上面的代码只是说明base64编码的原理,以便用更多语言重写。但.net里面可以使用更简单的方法:编码:byte byte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论