您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 实验五文件数据加密与解密
实验五文件数据加密与解密1.实验目的(1)练习数据加密与解密的实现方法。(2)练习将加密数据保存到文件中的方法。(3)练习从文件中读取加密后的数据的方法。2.建议用时建议用4小时完成本实验,或者根据自己的理解情况调整实际需要的时间。3.实验内容设计一个Windows应用程序,实现下面的功能。(1)使用某种加密算法加密窗体上TextBox控件中显示的文字,然后将其保存到文本文件MyData.txt中。(2)程序运行时,首先自动判断加密后的文件是否存在,如果文件存在,则根据加密密钥对加密内容进行解密,并将解密后的结果显示在窗体的TextBox控件中。4.实验步骤提示要顺利完成本实验,需要解决4个问题:一是采用哪种算法进行加密;二是如何将加密后的数据保存到文件中;三是如何保存加密密钥;四是如何将加密后的内容读取出来并进行解密处理。由于只有知道加密密钥才能进行解密,而实验中要求程序开始运行时就判断是否有加密后的文件,并对文件进行解密。因此如何在加密的同时将加密密钥也保存下来是完成本实验的关键。这个实验的实现方法有多种,参考解答仅仅是其中比较简单的一种。具体实现方法可以按照下面的步骤进行。(1)创建一个名为DataEncrypt的Windows应用程序,在【解决方案资源管理器】中,将Form1.cs换名为FormMain.cs。(2)从【工具箱】中向设计窗体拖放一个TextBox控件、一个【保存】按钮和一个【打开】按钮。界面设计效果如图1-15所示。图5-1界面设计(3)在【保存】按钮的Click事件代码中,创建MyData.txt文件,先将加密密钥写入文件中,然后再写入加密后的文本内容。参考代码如下。privatevoidbuttonSave_Click(objectsender,EventArgse){TripleDESCryptoServiceProvidertdes=newTripleDESCryptoServiceProvider();try{FileStreamfileStream=File.Open(fileName,FileMode.Create);fileStream.WriteByte(Convert.ToByte(tdes.Key.Length));fileStream.Write(tdes.Key,0,tdes.Key.Length);fileStream.WriteByte(Convert.ToByte(tdes.IV.Length));fileStream.Write(tdes.IV,0,tdes.IV.Length);CryptoStreamcryptoStream=newCryptoStream(fileStream,tdes.CreateEncryptor(tdes.Key,tdes.IV),CryptoStreamMode.Write);StreamWriterstreamWriter=newStreamWriter(cryptoStream);streamWriter.Write(textBox1.Text);streamWriter.Close();cryptoStream.Close();fileStream.Close();textBox1.Text=;MessageBox.Show(保存成功);}catch(Exceptionerr){MessageBox.Show(err.Message,出错);}}(4)编写一个DecryptFromFile方法,先读出加密密钥,再读出加密后的文本,并根据读出的密钥进行解密,然后将解密结果显示出来。参考代码如下。///summary///解密文件内容////summaryprivatevoidDecryptFromFile(){if(File.Exists(fileName)==false){textBox1.Text=;return;}try{FileStreamfileStream=File.Open(fileName,FileMode.Open);intlen=fileStream.ReadByte();byte[]tdesKey=newbyte[len];fileStream.Read(tdesKey,0,tdesKey.Length);len=fileStream.ReadByte();byte[]tdesIV=newbyte[len];fileStream.Read(tdesIV,0,tdesIV.Length);CryptoStreamcryptoStream=newCryptoStream(fileStream,newTripleDESCryptoServiceProvider().CreateDecryptor(tdesKey,tdesIV),CryptoStreamMode.Read);StreamReaderstreamReader=newStreamReader(cryptoStream);textBox1.Text=streamReader.ReadToEnd();streamReader.Close();cryptoStream.Close();fileStream.Close();}catch(Exceptionerr){MessageBox.Show(err.Message,解密被加密的文件出错);textBox1.Text=;}}采用这种办法,既可以实现保存密钥的目的,也起到了加密的作用。虽然该方法将加密密钥和实际数据保存在一起感觉不太安全,但是即使攻击者打开加密文件,也很难将加密密钥分离出来。当然,如果希望让加密效果更复杂些,也可以先写入几个字节的随机数,然后再保存加密密钥,读出时只需要将这几个字节先读出来,然后再读密钥即可。或者将加密密钥和被加密的数据交叉保存也会使破解的难度增大。对于一般的应用来说,这些方法已经够了。(5)在窗体的Load事件和【打开】按钮的Click事件中分别调用DecryptFromFile方法,完成解密的功能。(6)运行设计的程序,输入一些文字信息,单击【保存】按钮,然后打开bin目录下的MyData.txt文件,观察加密后显示的结果。5.实验报告中要求回答的问题(1)写出你认为有必要解释的关键代码。(2)写出实验中遇到的问题及解决方法。(3)你从这个实验中得到了哪些启发?
本文标题:实验五文件数据加密与解密
链接地址:https://www.777doc.com/doc-5334002 .html