c#可自定义码表的base64加密解密算法类

王朝学院·作者佚名  2016-08-28
窄屏简体版  字體: 小  |  中  |  大  |  超大  

000

1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;5usingSystem.Threading.Tasks;67namespaceLibraries8{9publicclassBase64Crypt10{11PRivatestringS;12privatestringK;13privateList<char>T;14publicBase64Crypt()15{16T =newList<char>();17K ="あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやよらりるれろわをぐげござじずぞだぢづでばびぶべぱぴぷぺぽ";18//K = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//标准码表19}20publicstringToken21{22get23{24returnS ==null?K : S;25}26set27{28T.Clear();29S =value;30if(S ==null)31{32foreach(variteminK)33{34T.Add(item);35}36}elseif(S.Length <64)37{38foreach(variteminS)39{40T.Add(item);41}42for(inti =0; i <64-S.Length; i++)43{44T.Add(K[i]);45}46}47else48{49for(inti =0; i <64; i++)50{51T.Add(S[i]);52}53}54}55}5657publicstringEncode(stringx)58{59returnstring.IsNullOrEmpty(x) ?x : InternalEncode(Encoding.UTF8.GetBytes(x));60}61publicstringDecode(stringx)62{63returnstring.IsNullOrEmpty(x) ?x : Encoding.UTF8.GetString(InternalDecode(x));64}6566publicbyte[] Encode(byte[] x)67{68returnx ==null?null: Encoding.UTF8.GetBytes(InternalEncode(x));69}70publicbyte[] Decode(byte[] x)71{72returnx ==null?null: InternalDecode(Encoding.UTF8.GetString(x));73}74privatevoidCheckToken()75{76if(T.Count !=64)77{78Token =K;79}80}81privatebyte[] InternalDecode(stringx)82{83CheckToken();84byte[] r;85stringt;86intp =0;87intm = x.Length /4;88intn = x.Length %4;89if(n ==0)90{91r =newbyte[3*m];92}93else94{95r =newbyte[3* m + n-1];96t =string.Empty;9798for(inti = n; i >0; i--)99{100t += ByteToBin((byte)T.IndexOf(x[x.Length - i])).Substring(2);101}102103for(inti =0; i < n-1; i++)104{105r[3* m + i] = BinToByte(t.Substring(8* i,8));106}107}108for(inti =0; i < m; i++)109{110t =string.Empty;111for(intj =0; j <4; j++)112{113t += ByteToBin((byte)T.IndexOf(x[4*i+j])).Substring(2);114}115for(intj =0; j < t.Length/8; j++)116{117r[p++] = BinToByte(t.Substring(8*j,8));118}119}120returnr;121}122privatestringInternalEncode(byte[] x)123{124CheckToken();125stringr =string.Empty;126stringt;127intm = x.Length /3;128intn = x.Length %3;129for(inti =0; i < m; i++)130{131t =string.Empty;132for(intj =0; j <3; j++)133{134t += ByteToBin(x[3* i +j]);135}136r +=base64Encode(t);137}138139if(n ==1)140{141t = ByteToBin(x[x.Length-1]).PadRight(12,'0');142r +=base64Encode(t);143}144elseif(n ==2)145{146t =string.Empty;147for(inti = n; i >0; i--)148{149t += ByteToBin(x[x.Length -i]);150}151t = t.PadRight(18,'0');152r +=base64Encode(t);153}154returnr;155}156privatestringbase64Encode(stringx)157{158stringr =string.Empty;159for(inti =0; i < x.Length /6; i++)160{161r += T[BinToByte(x.Substring(6* i,6))];162}163returnr;164}165166privatestringByteToBin(bytex)167{168returnConvert.ToString(x,2).PadLeft(8,'0');169}170privatebyteBinToByte(stringx)171{172returnConvert.ToByte(x,2);173}174175}176}177

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航