国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

c#可自定義碼表的base64加密解密算法類

2019-11-14 13:40:45
字體:
供稿:網(wǎng)友

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+/";//標(biāo)準(zhǔn)碼表 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  

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉林省| 玛沁县| 英吉沙县| 平武县| 马鞍山市| 宣城市| 朝阳区| 南溪县| 四子王旗| 西丰县| 云安县| 班玛县| 青川县| 安远县| 九江县| 东阿县| 平远县| 阳信县| 饶阳县| 鸡泽县| 松潘县| 阿尔山市| 来宾市| 海安县| 新龙县| 怀集县| 微博| 龙岩市| 马尔康县| 河西区| 浦东新区| 乐昌市| 赫章县| 宜丰县| 竹溪县| 漾濞| 菏泽市| 湖北省| 耒阳市| 白山市| 紫金县|