xuruiqian
2021-05-25 c0bbcd97fa2f130a7a60d02873fbf9038bdd4c15
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
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
 
namespace GTech.Solution.Api.Common
{
    public static class EncryptHelper
    {
        #region 创建字符串的MD5哈希值
        /// <summary>
        /// 创建字符串的MD5哈希值
        /// </summary>
        /// <param name="inputString"></param>
        /// <returns>字符串MD5哈希值的十六进制字符串</returns>
        public static string StringToMD5Hash(string inputString)
        {
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] encryptedBytes = md5.ComputeHash(Encoding.ASCII.GetBytes(inputString));
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < encryptedBytes.Length; i++)
            {
                sb.AppendFormat("{0:x2}", encryptedBytes[i]);
            }
            return sb.ToString();
        }
        #endregion
 
        #region  1、一般可逆加密解密
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="data">加密数据</param>
        /// <param name="KEY_64">密钥</param>
        /// <param name="IV_64">加密向量</param>
        /// <returns>加密数据结果</returns>
        public static string Encode(string data, string KEY_64, string IV_64)
        {
            byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
            byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
 
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            int i = cryptoProvider.KeySize;
            MemoryStream ms = new MemoryStream();
            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
 
            StreamWriter sw = new StreamWriter(cst);
            sw.Write(data);
            sw.Flush();
            cst.FlushFinalBlock();
            sw.Flush();
            return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="data">解密数据</param>
        /// <param name="KEY_64">密钥</param>
        /// <param name="IV_64">加密向量</param>
        /// <returns>解密数据结果</returns>
        public static string Decode(string data, string KEY_64, string IV_64)
        {
            byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
            byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
 
            byte[] byEnc;
            try
            {
                byEnc = Convert.FromBase64String(data);
            }
            catch
            {
                return null;
            }
 
            DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
            MemoryStream ms = new MemoryStream(byEnc);
            CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
            StreamReader sr = new StreamReader(cst);
            return sr.ReadToEnd();
        }
        #endregion
        
        #region 3、DES加密解密
        /// <summary>
        /// DES 加密
        /// </summary>
        /// <param name="str">加密字符串</param>
        /// <param name="encrytKey">密钥,要求八位</param>
        /// <param name="strDESIV">向量</param>
        /// <returns></returns>
        public static string DESEncode(string str, string strDESKey, string strDESIV)
        {
            return DESEncrytion.DESEncrypt(str, strDESKey, strDESIV);
        }
        /// <summary>
        /// DES 解密
        /// </summary>
        /// <param name="str">解密字符串</param>
        /// <param name="encrytKey">密钥,要求八位</param>
        /// <param name="strDESIV">向量</param>
        /// <returns></returns>
        public static string DESDecode(string str, string strDESKey, string strDESIV)
        {
            return DESEncrytion.DESDecrypt(str, strDESKey, strDESIV);
        }
 
        /// <summary>
        /// DES 加密  加密向量默认
        /// </summary>
        /// <param name="str">加密字符串</param>
        /// <param name="encrytKey">密钥,要求八位</param>
        /// <returns></returns>
        public static string DESEncode(string str, string encrytKey)
        {
            return DESEncrytion.EncryptDES(str, encrytKey);
        }
        /// <summary>
        /// DES 解密  加密向量默认
        /// </summary>
        /// <param name="str">待解密字符串</param>
        /// <param name="encrytKey">解密密钥,要求为8位,和加密密钥相同</param>
        /// <returns></returns>
        public static string DESDecode(string str, string encrytKey)
        {
            return DESEncrytion.DecryptDES(str, encrytKey);
        }
        #endregion
 
        #region 4、文件加密解密
 
        /// <summary>
        /// 加密文件 
        /// </summary>
        /// <param name="inName">源文件全名称</param>
        /// <param name="outName">加密后文件保存全名称</param>
        /// <param name="desKey">加密密钥</param>
        /// <param name="desIV">加密向量</param>
        private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)
        {
            FileEncrytion.EncryptData(inName, outName, desKey, desIV);
        }
 
        /// <summary>
        /// 解密文件 
        /// </summary>
        /// <param name="inName">源文件全名称</param>
        /// <param name="outName">解密文件全名称</param>
        /// <param name="desKey">解密密钥</param>
        /// <param name="desIV">解密向量</param>
        private static void DecryptData(String inName, String outName, byte[] desKey, byte[] desIV)
        {
            FileEncrytion.DecryptData(inName, outName, desKey, desIV);
        }
 
        #endregion
        
        #region 6、对称加密
 
        /// <summary>    
        /// 加密方法    
        /// </summary>    
        /// <param name="Source">待加密的串</param>    
        /// <returns>经过加密的串</returns>    
        public static string Encrypto(string Source)
        {
            return SymmetricEncrytion.Encrypto(Source);
        }
        /// <summary>    
        /// 解密方法    
        /// </summary>    
        /// <param name="Source">待解密的串</param>    
        /// <returns>经过解密的串</returns>    
        public static string Decrypto(string Source)
        {
            return SymmetricEncrytion.Decrypto(Source);
        }
        #endregion
    }
}