222
schangxiang@126.com
3 天以前 d6284b6874941babb2c9883296594f83bc595239
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
namespace iWareCommon.Utils
{
    public class MyBase64Helper
    {
        private static string myBase64Chars = "LMNrstuOPQABCDEF#$%GHIJKmnopqvwxyRSTUVWXYZ~@^&*(abcdefghijklz+-)";
      
        /// <summary>
        /// 自定义的将字节码数字转base64的算法
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static string ToBase64String(byte[] bytes) 
        {
            var str = "";
            foreach (var b in bytes) { str += Convert.ToString(b,2).PadLeft(8,'0');}
            var nb = str.Length % 6;
            if(nb > 0) {nb = 6 - nb;}
            str += "".PadLeft(nb, '0');
            var res = "";
            for (var i = 0; i < str.Length; i += 6) 
            {
                var subStr = str.Substring(i, 6);
                var index = Convert.ToByte(subStr, 2);
                res += myBase64Chars[index];
            }
            res += "".PadLeft(nb, '=');
            return res; 
        }
 
        /// <summary>
        /// 自动义的将Base64串转字节码数字
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static byte[] ToBytes(string str)
        {
            var nb = 0;
            var p = str.IndexOf('=');
            if (p > -1) { nb = str.Length - p; }
            var t = "";
            for (var i = 0; i < str.Length - nb; i++) 
            {
                var ind = myBase64Chars.IndexOf(str[i]);
                t += Convert.ToString(ind, 2).PadLeft(6, '0');
            }
            var bytes = new List<byte>();
            for (var i = 0; i < t.Length - nb; i += 8)
            {
                var subStr = t.Substring(i, 8);
                bytes.Add(Convert.ToByte(subStr, 2));
            }
            return bytes.ToArray();            
        }
    }
}