星空网 > 软件开发 > ASP.net

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

000

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace Libraries 8 { 9   public class Base64Crypt 10   { 11     private string S; 12     private string K; 13     private List<char> T; 14     public Base64Crypt() 15     { 16       T = new List<char>(); 17       K = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやよらりるれろわをぐげござじずぞだぢづでばびぶべぱぴぷぺぽ"; 18       //K = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//标准码表 19     } 20     public string Token 21     { 22       get 23       { 24         return S == null ? K : S; 25       } 26       set 27       { 28         T.Clear(); 29         S = value; 30         if (S == null) 31         { 32           foreach (var item in K) 33           { 34             T.Add(item); 35           } 36         }else if (S.Length < 64) 37         { 38           foreach (var item in S) 39           { 40             T.Add(item); 41           } 42           for (int i = 0; i < 64-S.Length; i++) 43           { 44             T.Add(K[i]); 45           } 46         } 47         else 48         { 49           for (int i = 0; i < 64; i++) 50           { 51             T.Add(S[i]); 52           } 53         } 54       } 55     } 56  57     public string Encode(string x) 58     { 59       return string.IsNullOrEmpty(x) ? x : InternalEncode(Encoding.UTF8.GetBytes(x)); 60     } 61     public string Decode(string x) 62     { 63       return string.IsNullOrEmpty(x) ? x : Encoding.UTF8.GetString(InternalDecode(x)); 64     } 65  66     public byte[] Encode(byte[] x) 67     { 68       return x == null ? null : Encoding.UTF8.GetBytes(InternalEncode(x)); 69     } 70     public byte[] Decode(byte[] x) 71     { 72       return x == null ? null : InternalDecode(Encoding.UTF8.GetString(x)); 73     } 74     private void CheckToken() 75     { 76       if (T.Count != 64) 77       { 78         Token = K; 79       } 80     } 81     private byte[] InternalDecode(string x) 82     { 83       CheckToken(); 84       byte[] r; 85       string t; 86       int p = 0; 87       int m = x.Length / 4; 88       int n = x.Length % 4; 89       if (n == 0) 90       { 91         r = new byte[3 * m]; 92       } 93       else 94       { 95         r = new byte[3 * m + n-1]; 96         t = string.Empty; 97  98         for (int i = n; i > 0; i--) 99         {100           t += ByteToBin((byte)T.IndexOf(x[x.Length - i])).Substring(2);101         }102 103         for (int i = 0; i < n-1 ; i++)104         {105           r[3 * m + i] = BinToByte(t.Substring(8 * i, 8));106         }107       }108       for (int i = 0; i < m; i++)109       {110         t = string.Empty;111         for (int j = 0; j < 4; j++)112         {113           t += ByteToBin((byte)T.IndexOf(x[4*i+j])).Substring(2);114         }115         for (int j = 0; j < t.Length/8; j++)116         {117           r[p++] = BinToByte(t.Substring(8*j,8));118         }119       }120       return r;121     }122     private string InternalEncode(byte[] x)123     {124       CheckToken();125       string r = string.Empty;126       string t;127       int m = x.Length / 3;128       int n = x.Length % 3;129       for (int i = 0; i < m; i++)130       {131         t = string.Empty;132         for (int j = 0; j < 3; j++)133         {134           t += ByteToBin(x[3 * i + j]);135         }136         r += base64Encode(t);137       }138 139       if (n == 1)140       {141         t = ByteToBin(x[x.Length-1]).PadRight(12,'0');142         r += base64Encode(t);143       }144       else if (n == 2)145       {146         t = string.Empty;147         for (int i = n; i > 0; i--)148         {149           t += ByteToBin(x[x.Length - i]);150         }151         t = t.PadRight(18,'0');152         r += base64Encode(t);153       }154       return r;155     }156     private string base64Encode(string x)157     {158       string r = string.Empty;159       for (int i = 0; i < x.Length / 6; i++)160       {161         r += T[BinToByte(x.Substring(6 * i, 6))];162       }163       return r;164     }165     166     private string ByteToBin(byte x)167     {168       return Convert.ToString(x,2).PadLeft(8,'0');169     }170     private byte BinToByte(string x)171     {172       return Convert.ToByte(x,2);173     }174 175   }176 }177 

 




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

关键词:C#

C#
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流