最近在一个工程中需要对DataSet进行加密,然后以文件形式传输后在另一端解密还原。于是查询了一些资料,发现多是对字符串和文件加密的方法。于是只好自力更生,参考.net的对称加密技术和网上的一些资料,研究出了DataSet的加密方法。
代码比较简单,附下:
1 using System;
2 using System.Collections;
3 using System.Security.Cryptography;
4 using System.IO ;
5 using System.Data;
6 using System.Xml.Serialization;
7 namespace zjz.ClsDoCode
8 {
9 /**//// <summary>
10 /// ClsEncryption 的摘要说明。
11 /// </summary>
12 public class ClsEncryption
13 {
14 public ClsEncryption()
15 {
16 //
17 // TODO: 在此处添加构造函数逻辑
18 //
19 }
20 //密钥
21 //获取或设置对称算法的机密密钥。机密密钥既用于加密,也用于解密。为了保证对称算法的安全,必须只有发送方和接收方知道该机密密钥。有效密钥大小是由特定对称算法实现指定的,密钥大小在 LegalKeySizes 中列出。
22 private static byte[] DESKey = new byte[] {11, 23, 93, 102, 72, 41, 18, 12};
23 //获取或设置对称算法的初始化向量
24 private static byte[] DESIV = new byte[] {75, 158, 46, 97, 78, 57, 17, 36};
25
26 /**//// <summary>
27 /// 加密DataSet
28 /// </summary>
29 /// <param name="objDataSet"></param>
30 /// <param name="outFilePath"></param>
31 public static void EncryptDataSetToXml(DataSet objDataSet,string outXmlFilePath)
32 {
33 DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();
34 FileStream fout = new FileStream(outXmlFilePath, FileMode.OpenOrCreate, FileAccess.Write);
35 //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象
36 CryptoStream objCryptoStream = new CryptoStream(fout, objDES.CreateEncryptor(DESKey, DESIV), CryptoStreamMode.Write);
37 StreamWriter objStreamWriter = new StreamWriter(objCryptoStream);
38 XmlSerializer objXmlSer = new XmlSerializer(typeof(DataSet));
39 objXmlSer.Serialize(objStreamWriter, objDataSet);
40 objStreamWriter.Close();
41
42 }
43 public static DataSet DecryptDataSetFromXml(string inXmlFilePath)
44 {
45 DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();
46 FileStream fin = new FileStream(inXmlFilePath, FileMode.Open , FileAccess.Read );
47 //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象
48 CryptoStream objCryptoStream = new CryptoStream(fin, objDES.CreateDecryptor(DESKey, DESIV), CryptoStreamMode.Read);
49 TextReader objTxrReader = new StreamReader(objCryptoStream);
50 XmlSerializer objXmlSer = new XmlSerializer(typeof(DataSet));
51 DataSet ds = (DataSet)objXmlSer.Deserialize(objTxrReader);
52 return ds;
53 }
54 }
55}
56
小结:关于对称加密算法,大家可以参考微软的资料和网上的资料,这里就不多做解释了。下面是源代码文件,里面还包含有字符串和文件加密的方法,当然那些是别人的代码。2 using System.Collections;
3 using System.Security.Cryptography;
4 using System.IO ;
5 using System.Data;
6 using System.Xml.Serialization;
7 namespace zjz.ClsDoCode
8 {
9 /**//// <summary>
10 /// ClsEncryption 的摘要说明。
11 /// </summary>
12 public class ClsEncryption
13 {
14 public ClsEncryption()
15 {
16 //
17 // TODO: 在此处添加构造函数逻辑
18 //
19 }
20 //密钥
21 //获取或设置对称算法的机密密钥。机密密钥既用于加密,也用于解密。为了保证对称算法的安全,必须只有发送方和接收方知道该机密密钥。有效密钥大小是由特定对称算法实现指定的,密钥大小在 LegalKeySizes 中列出。
22 private static byte[] DESKey = new byte[] {11, 23, 93, 102, 72, 41, 18, 12};
23 //获取或设置对称算法的初始化向量
24 private static byte[] DESIV = new byte[] {75, 158, 46, 97, 78, 57, 17, 36};
25
26 /**//// <summary>
27 /// 加密DataSet
28 /// </summary>
29 /// <param name="objDataSet"></param>
30 /// <param name="outFilePath"></param>
31 public static void EncryptDataSetToXml(DataSet objDataSet,string outXmlFilePath)
32 {
33 DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();
34 FileStream fout = new FileStream(outXmlFilePath, FileMode.OpenOrCreate, FileAccess.Write);
35 //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象
36 CryptoStream objCryptoStream = new CryptoStream(fout, objDES.CreateEncryptor(DESKey, DESIV), CryptoStreamMode.Write);
37 StreamWriter objStreamWriter = new StreamWriter(objCryptoStream);
38 XmlSerializer objXmlSer = new XmlSerializer(typeof(DataSet));
39 objXmlSer.Serialize(objStreamWriter, objDataSet);
40 objStreamWriter.Close();
41
42 }
43 public static DataSet DecryptDataSetFromXml(string inXmlFilePath)
44 {
45 DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();
46 FileStream fin = new FileStream(inXmlFilePath, FileMode.Open , FileAccess.Read );
47 //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象
48 CryptoStream objCryptoStream = new CryptoStream(fin, objDES.CreateDecryptor(DESKey, DESIV), CryptoStreamMode.Read);
49 TextReader objTxrReader = new StreamReader(objCryptoStream);
50 XmlSerializer objXmlSer = new XmlSerializer(typeof(DataSet));
51 DataSet ds = (DataSet)objXmlSer.Deserialize(objTxrReader);
52 return ds;
53 }
54 }
55}
56
/Files/zjzkiss/ClsDoCode.rar