des算法的C#实现
DES是Data Encryption Standard(数据加密标准)的缩写。它是一种用56位密钥来加密64位数据的方法。它的原理和算法就不在这里介绍了,网上这方面的资料很多。下面是我参照别人的代码修改的一个DES加密和解密的类。供大家参考:
代码
1 public class EncryptUtility
2 {
3 #region DES
4 /// <summary>
5 /// DES加密
6 /// </summary>
7 /// <param name="code">加密字符串</param>
8 /// <param name="key">密钥</param>
9 /// <returns></returns>
10 public static string DesEncrypt(string code, string key)
11 {
12 string iv = StringUtility.Reverse(key);
13 return DesEncrypt(code, key, iv);
14 }
15
16 /// <summary>
17 /// DES加密
18 /// </summary>
19 /// <param name="code">加密字符串</param>
20 /// <param name="key">密钥</param>
21 /// <param name="iv">初始化向量</param>
22 /// <returns></returns>
23 public static string DesEncrypt(string code, string key, string iv)
24 {
25 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
26 byte[] inputByteArray = Encoding.Default.GetBytes(code);
27 des.Key = ASCIIEncoding.ASCII.GetBytes(key);
28 des.IV = ASCIIEncoding.ASCII.GetBytes(iv);
29 MemoryStream ms = new MemoryStream();
30 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
31 cs.Write(inputByteArray, 0, inputByteArray.Length);
32 cs.FlushFinalBlock();
33 StringBuilder ret = new StringBuilder();
34 foreach (byte b in ms.ToArray())
35 {
36 ret.AppendFormat("{0:X2}", b);
37 }
38 ms.Dispose();
39 cs.Dispose();
40 //ret.ToString();
41 return ret.ToString();
42 }
43
44
45 /// <summary>
46 /// DES解密
47 /// </summary>
48 /// <param name="code">解密字符串</param>
49 /// <param name="key">密钥</param>
50 /// <param name="key"></param>
51 /// <returns></returns>
52 public static string DesDecrypt(string code, string key)
53 {
54 string iv = StringUtility.Reverse(key);
55 return DesDecrypt(code, key, iv);
56 }
57
58
59 /// <summary>
60 /// DES解密
61 /// </summary>
62 /// <param name="code">解密字符串</param>
63 /// <param name="key">密钥</param>
64 /// <param name="iv">初始化向量</param>
65 /// <returns></returns>
66 public static string DesDecrypt(string code, string key, string iv)
67 {
68 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
69 byte[] inputByteArray = new byte[code.Length / 2];
70 for (int x = 0; x < code.Length / 2; x++)
71 {
72 int i = (Convert.ToInt32(code.Substring(x * 2, 2), 16));
73 inputByteArray[x] = (byte)i;
74 }
75 des.Key = ASCIIEncoding.ASCII.GetBytes(key);
76 des.IV = ASCIIEncoding.ASCII.GetBytes(iv);
77 MemoryStream ms = new MemoryStream();
78 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
79 cs.Write(inputByteArray, 0, inputByteArray.Length);
80 cs.FlushFinalBlock();
81 cs.Dispose();
82 StringBuilder ret = new StringBuilder();
83 return System.Text.Encoding.Default.GetString(ms.ToArray());
84 }
85 #endregion
86 }
2 {
3 #region DES
4 /// <summary>
5 /// DES加密
6 /// </summary>
7 /// <param name="code">加密字符串</param>
8 /// <param name="key">密钥</param>
9 /// <returns></returns>
10 public static string DesEncrypt(string code, string key)
11 {
12 string iv = StringUtility.Reverse(key);
13 return DesEncrypt(code, key, iv);
14 }
15
16 /// <summary>
17 /// DES加密
18 /// </summary>
19 /// <param name="code">加密字符串</param>
20 /// <param name="key">密钥</param>
21 /// <param name="iv">初始化向量</param>
22 /// <returns></returns>
23 public static string DesEncrypt(string code, string key, string iv)
24 {
25 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
26 byte[] inputByteArray = Encoding.Default.GetBytes(code);
27 des.Key = ASCIIEncoding.ASCII.GetBytes(key);
28 des.IV = ASCIIEncoding.ASCII.GetBytes(iv);
29 MemoryStream ms = new MemoryStream();
30 CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
31 cs.Write(inputByteArray, 0, inputByteArray.Length);
32 cs.FlushFinalBlock();
33 StringBuilder ret = new StringBuilder();
34 foreach (byte b in ms.ToArray())
35 {
36 ret.AppendFormat("{0:X2}", b);
37 }
38 ms.Dispose();
39 cs.Dispose();
40 //ret.ToString();
41 return ret.ToString();
42 }
43
44
45 /// <summary>
46 /// DES解密
47 /// </summary>
48 /// <param name="code">解密字符串</param>
49 /// <param name="key">密钥</param>
50 /// <param name="key"></param>
51 /// <returns></returns>
52 public static string DesDecrypt(string code, string key)
53 {
54 string iv = StringUtility.Reverse(key);
55 return DesDecrypt(code, key, iv);
56 }
57
58
59 /// <summary>
60 /// DES解密
61 /// </summary>
62 /// <param name="code">解密字符串</param>
63 /// <param name="key">密钥</param>
64 /// <param name="iv">初始化向量</param>
65 /// <returns></returns>
66 public static string DesDecrypt(string code, string key, string iv)
67 {
68 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
69 byte[] inputByteArray = new byte[code.Length / 2];
70 for (int x = 0; x < code.Length / 2; x++)
71 {
72 int i = (Convert.ToInt32(code.Substring(x * 2, 2), 16));
73 inputByteArray[x] = (byte)i;
74 }
75 des.Key = ASCIIEncoding.ASCII.GetBytes(key);
76 des.IV = ASCIIEncoding.ASCII.GetBytes(iv);
77 MemoryStream ms = new MemoryStream();
78 CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
79 cs.Write(inputByteArray, 0, inputByteArray.Length);
80 cs.FlushFinalBlock();
81 cs.Dispose();
82 StringBuilder ret = new StringBuilder();
83 return System.Text.Encoding.Default.GetString(ms.ToArray());
84 }
85 #endregion
86 }