jinxin
2025-06-04 d968571628134ed672d9c6e4ba5cf32ba8d9644b
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
 
namespace HH.WCS.NongFuChaYuan.OtherService
{
    class CryptoDecryptHelper
    {
        public static void Test()
        {
            #region   后台调用 企业微信自建应用程序 实现 实时报警功能
            //App:tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8  通讯录:BIrQFYaP6E5ZBYkRHUjeFU2IkzCqsokIM5Bct74U9ec
            //bool result = WeiXin.Init(1000002, "ww0b0c7633edccae9c", "tUI9CvF7d3b7_j8njXEQOdp4TGn_aPuALtNYuh9SGb8");
            //if (result)
            //{
            //    WeiXin.SendMessageToUser("郑如嶺","111111111");
            //}
            #endregion
 
            #region   AES+MD5 加密解密功能
            //var str = JsonConvert.SerializeObject(new { platform = "111", actionType = 1, taskNo = "111111", reqTime = "2022-08-03 14:12:00" });
            //var res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to");
            //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to",enmKeyBit.KeyBit128);
            //res = AESEncrypt(str, "de987awms8nfsspt22731o2ts0j833to", enmKeyBit.KeyBit192);
            //var req = AESDecrypt(res, "de987awms8nfsspt22731o2ts0j833to");
            //string TokenMsg = "";
            //var httpVerify = Settings.GetHttpApiVerifyList().Where(a => a.VerifyNo == "1" && a.Project == Settings.ProjectName && a.Enable == "1").FirstOrDefault();
            //if (httpVerify != null) TokenMsg = httpVerify.Extend[0] + "from" + httpVerify.Extend[1] + "timestamp" + DateTime.Now.ToString().Replace("/","-");
            ////Console.WriteLine($"加密前明文:{TokenMsg}");
            //string TokenMsgEncrypt = GetMd5FromString(TokenMsg);
            ////Console.WriteLine($"加密后密文1:{TokenMsgEncrypt}");
            //TokenMsgEncrypt = GetMd5Hash(TokenMsg);
            ////Console.WriteLine($"加密后密文2:{TokenMsgEncrypt}");
            //TokenMsgEncrypt = MD5Encrypt16(TokenMsg);
            ////Console.WriteLine($"加密后密文16:{TokenMsgEncrypt}");
            //TokenMsgEncrypt = MD5Encrypt32(TokenMsg);
            ////Console.WriteLine($"加密后密文32:{TokenMsgEncrypt}");
            //TokenMsgEncrypt = MD5Encrypt64(TokenMsg);
            ////Console.WriteLine($"加密后密文64:{TokenMsgEncrypt}");
            #endregion
        }
 
        public enum enmKeyBit
        {
            KeyBit128 = 128,
            KeyBit192 = 192,
            KeyBit256 = 256,
        }
        /// <summary>
        /// AES ECB模式 加密
        /// </summary>
        /// <param name="data">明文</param>
        /// <param name="key">密钥</param>
        /// <param name="keyBit">密钥位数</param>
        /// <returns></returns>
        public static string AESEncrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
        {
            if (string.IsNullOrEmpty(data))
            {
                return string.Empty;
            }
 
            try
            {
                int intKeyBit = (int)keyBit;
                RijndaelManaged aes = new RijndaelManaged();
                byte[] bytsData = Encoding.UTF8.GetBytes(data);
                byte[] bytsKey = new Byte[intKeyBit / 8];
                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
 
                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = intKeyBit;
                aes.Key = bytsKey;
                //aes.IV = iv;
                ICryptoTransform ctf = aes.CreateEncryptor();
                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
 
                return Convert.ToBase64String(bytsResult);
            }
            catch
            {
                return string.Empty;
            }
        }
        /// <summary>
        /// AES ECB模式 解密
        /// </summary>
        /// <param name="data">密文</param>
        /// <param name="key">密钥</param>
        /// <param name="keyBit">密钥位数</param>
        /// <returns></returns>
        public static string AESDecrypt(String data, String key, enmKeyBit keyBit = enmKeyBit.KeyBit256)
        {
            if (string.IsNullOrEmpty(data))
            {
                return string.Empty;
            }
            try
            {
                int intKeyBit = (int)keyBit;
                RijndaelManaged aes = new RijndaelManaged();
                byte[] bytsData = Convert.FromBase64String(data);
                byte[] bytsKey = new Byte[intKeyBit / 8];
                Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bytsKey.Length)), bytsKey, bytsKey.Length);
 
                aes.Mode = CipherMode.ECB;
                aes.Padding = PaddingMode.PKCS7;
                aes.KeySize = intKeyBit;
                aes.Key = bytsKey;
                //aes.IV = iv;
 
                ICryptoTransform ctf = aes.CreateDecryptor();
                byte[] bytsResult = ctf.TransformFinalBlock(bytsData, 0, bytsData.Length);
 
                return UTF8Encoding.UTF8.GetString(bytsResult);
            }
            catch
            {
                return string.Empty;
            }
        }
 
        /// <summary>
        /// MD5加密
        /// </summary>
        /// <param name="sInput"></param>
        /// <returns></returns>
        public static string GetMd5FromString(string sInput)
        {
            var lstData = Encoding.GetEncoding("utf-8").GetBytes(sInput);
            var lstHash = new MD5CryptoServiceProvider().ComputeHash(lstData);
            var result = new StringBuilder(32);
            for (int i = 0; i < lstHash.Length; i++)
            {
                result.Append(lstHash[i].ToString("x2").ToUpper());
            }
            return result.ToString();
        }
        /// <summary>
        /// MD5加密方式二
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        static string GetMd5Hash(string input)
        {
            using (MD5 md5 = MD5.Create())
            {
                byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < data.Length; i++)
                {
                    sb.Append(data[i].ToString("x2"));
                }
                return sb.ToString();
            }
        }
 
        /// <summary>
        /// 16位MD5加密
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public static string MD5Encrypt16(string password)
        {
            var md5 = new MD5CryptoServiceProvider();
            string t2 = BitConverter.ToString(md5.ComputeHash(Encoding.Default.GetBytes(password)), 4, 8);
            t2 = t2.Replace("-", "");
            return t2;
        }
 
        /// <summary>
        /// 32位MD5加密
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public static string MD5Encrypt32(string password)
        {
            string cl = password;
            string pwd = "";
            MD5 md5 = MD5.Create(); //实例化一个md5对像
                                    // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                pwd = pwd + s[i].ToString("X");
            }
            return pwd;
        }
 
        /// <summary>
        /// 64位MD5加密
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public static string MD5Encrypt64(string password)
        {
            string cl = password;
            //string pwd = "";
            MD5 md5 = MD5.Create(); //实例化一个md5对像
                                    // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
            return Convert.ToBase64String(s);
        }
    }
}