DES 加密算法
1
2 using System;
3 using System.Collections.Generic;
4 using System.Text;
5 using System.Configuration;
6 using System.IO;
7 using System.Security;
8 using System.Security.Cryptography;
9
10 namespace SpaceName
11 {
12 public static class EncryptionExtensions
13 {
14 #region 加密字符串扩展方法
15 /// <summary>
16 /// 加密字符串
17 /// </summary>
18 /// <param name="sValue">字符串</param>
19 /// <returns></returns>
20 public static string EncodeString(this string sValue)
21 {
22 string strEncoded = string.Empty;
23 //string strEncoded = "";
24
25 //使用内存流和DES算法加密
26 MemoryStream ms = new MemoryStream();
27 DES cr = new DESCryptoServiceProvider();
28
29 //选用DES算法加密时要保证定义的字符串按Default编码(是为了可写字符串尽可能长)时不超过8个字节(中文一个汉字占用2个字节)
30 byte[] Key = System.Text.Encoding.Default.GetBytes("yourcode");
31 byte[] IV = System.Text.Encoding.Default.GetBytes("yourcode");
32
33 //创建加密流 使用Default编码写入要加密的文本是为了加密结果尽可能小
34 //将加密后的数据用Base64编码然后存入数据库字符串类型的字段中 原因是加密后的数据是非字符类型的二进制数据强行转换任何常规编码的字符串都会丢失数据
35 //最终结果长度为 Math.Ceiling(要加密的文本的Default编码长度/8) * 8 * 1.5 比如 8个字节的原始数据加密后是8个字节 再转为Base64后为12个字节
36 CryptoStream ecs = new CryptoStream(ms, cr.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
37 StreamWriter sw = new StreamWriter(ecs, System.Text.Encoding.Default);
38 sw.Write(sValue);
39 sw.Flush();
40 ecs.FlushFinalBlock();
41 strEncoded = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
42 sw.Close();
43
44 return strEncoded;
45 }
46 #endregion
47
48 #region 解密字符串扩展方法
49 /// <summary>
50 /// 解密字符串
51 /// </summary>
52 /// <param name="sValue">字符串</param>
53 /// <returns></returns>
54 public static string DecodeString(this string sValue)
55 {
56 string strDecoded = string.Empty;
57 //string strDecoded = "";
58
59 byte[] Key = System.Text.Encoding.Default.GetBytes("yourcode");
60 byte[] IV = System.Text.Encoding.Default.GetBytes("yourcode");
61
62 //从Base64编码中还原出要解密的数据
63 DES cr = new DESCryptoServiceProvider();
64 MemoryStream ms = new MemoryStream(Convert.FromBase64String(sValue));
65
66 //创建解密数据流 使用与加密时相同的写入流编码格式读出原始文本
67 CryptoStream dcs = new CryptoStream(ms, cr.CreateDecryptor(Key, IV), CryptoStreamMode.Read);
68 StreamReader sr = new StreamReader(dcs, System.Text.Encoding.Default);
69 strDecoded = sr.ReadToEnd();
70 sr.Close();
71
72 return strDecoded;
73 }
74 #endregion
75 }
76 }
77