加密与解密DataSet

来源:互联网 发布:sql查询语句设置条件 编辑:程序博客网 时间:2024/05/26 12:02

public partial class _429 : System.Web.UI.Page

{

    //获取或设置对称算法的机密密钥。机密密钥既用于加密,也用于解密。为了保证对称算法的安全,

    //必须只有发送方和接收方知道该机密密钥。有效密钥大小是由特定对称算法实现,密钥大小在 LegalKeySizes 中列出。

    private static byte[] DESKey = new byte[] {11,23,93,102,72,41,18,43};

    //获取或设置对称算法的初始化向量

    private static byte[] DESSIV = new byte[] {75,158,46,97,78,57,17,66};

    protected void Page_Load(object sender, EventArgs e)

    {

      

    }

    //加密

    protected void Button1_Click(object sender, EventArgs e)

    {

        SqlConnection conn = new SqlConnection(@"server=./hxh;database=db_18;uid=sa;pwd=hxhlxf;");

        SqlDataAdapter da = new SqlDataAdapter("select * from 员工工资表", conn);

        DataSet ds = new DataSet();

        da.Fill(ds);

        //调用实现加密的EncryptDataSetToXML(DataSet ds,string outXMLFilePath)方法

        EncryptDataSetToXML(ds, Server.MapPath("~/429_DataSet.xml"));

        GridView1.DataSource = ds;

        GridView1.DataBind();

    }

 

    //实现加密锁

    public static void EncryptDataSetToXML(DataSet ds, string outXMLFilePath)

    {

        DESCryptoServiceProvider objDES = new DESCryptoServiceProvider();

 

        FileStream fout = new FileStream(outXMLFilePath, FileMode.OpenOrCreate, FileAccess.Write);

        //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 加密器对象

        CryptoStream objCryptoStream = new CryptoStream(fout, objDES.CreateEncryptor(DESKey, DESSIV), CryptoStreamMode.Write);

 

        StreamWriter objStreamWriter = new StreamWriter(objCryptoStream);

 

        XmlSerializer objXMLSer = new XmlSerializer(typeof(DataSet));

 

        objXMLSer.Serialize(objStreamWriter, ds);

 

        objStreamWriter.Close();

    }

    //实现对 DataSet 的解密

    public static DataSet DecryptDataSetFromXML(string inXMLPath)

    {

         DESCryptoServiceProvider objDES=new DESCryptoServiceProvider();

 

         FileStream fin=new FileStream(inXMLPath,FileMode.Open,FileAccess.Read);

 

         //用指定的 Key 和初始化向量 (IV) 创建对称数据加密标准 (DES) 解密器对象

         CryptoStream objCryptoStream=new CryptoStream(fin,objDES.CreateDecryptor(DESKey,DESSIV),CryptoStreamMode.Read);

 

         TextReader objTxrRead=new StreamReader(objCryptoStream);

 

         XmlSerializer objXMLSer=new XmlSerializer(typeof(DataSet));

 

         DataSet ds= (DataSet)objXMLSer.Deserialize(objTxrRead);

 

         return ds;

    }

    //解密按钮

    protected void Button2_Click(object sender, EventArgs e)

    {

        GridView1.DataSource = DecryptDataSetFromXML(Server.MapPath("~/429_DataSet.xml"));

        GridView1.DataBind();

    }

}

要导入的命名空间为:

using System.Security.Cryptography;

using System.IO;

using System.Xml.Serialization;

using System.Xml;

原创粉丝点击