XML 文件加密与解密
????? 做這個小程序實屬無奈,客戶擔心文件泄露,要求我們加密,其實都不是什么重要的文件,純屬是客戶給我們加工作量,但是也算是學到了一些東西,因此博主對客戶的感情摻雜這愛與恨吧。下面看看我的程序吧,其實很簡單,主要是用WPF做的。
加密解密文件當然要有相關的加密解密函數:
? public void Decrypt(string filename)//解密函數
??????? {
??????????? XmlDocument doc = new XmlDocument();
??????????? doc.Load(filename);
??????????? XmlElement encryptedElement = doc.GetElementsByTagName("EncryptedData")[0] as XmlElement;
??????????? EncryptedData edElement = new EncryptedData();
??????????? edElement.LoadXml(encryptedElement);
??????????? EncryptedXml exml = new EncryptedXml();
??????????? RijndaelManaged key = new RijndaelManaged();
??????????? byte[] bytekey = Encoding.Unicode.GetBytes("1111111111111111");
??????????? key.Key = bytekey;
??????????? byte[] output = exml.DecryptData(edElement, key);
??????????? exml.ReplaceData(encryptedElement, output);
??????????? doc.Save(filename);
??????? }
??????? public void Encrypt(string filename)加密函數
??????? {
??????????? XmlDocument doc = new XmlDocument();
??????????? doc.Load(filename);
??????????? RijndaelManaged Key = new RijndaelManaged();
??????????? byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111");
??????????? Key.Key = byteKey;
??????????? string ElementName = doc.DocumentElement.Name;
??????????? XmlElement elementToEncrypt = doc.GetElementsByTagName(ElementName)[0] as XmlElement;
??????????? EncryptedXml eXml = new EncryptedXml();
??????????? byte[] encryptedElement = eXml.EncryptData(elementToEncrypt, Key, false);
??????????? EncryptedData edElement = new EncryptedData();
??????????? edElement.Type = EncryptedXml.XmlEncElementUrl;
??????????? string encryptionMethod = null;
??????????? if (Key is TripleDES)
??????????? {
??????????????? encryptionMethod = EncryptedXml.XmlEncTripleDESUrl;
??????????? }
??????????? else if (Key is DES)
??????????? {
??????????????? encryptionMethod = EncryptedXml.XmlEncDESUrl;
??????????? }
??????????? if (Key is Rijndael)
??????????? {
??????????????? switch (Key.KeySize)
??????????????? {
??????????????????? case 128:
??????????????????????? encryptionMethod = EncryptedXml.XmlEncAES128Url;
??????????????????????? break;
??????????????????? case 192:
??????????????????????? encryptionMethod = EncryptedXml.XmlEncAES192Url;
??????????????????????? break;
??????????????????? case 256:
??????????????????????? encryptionMethod = EncryptedXml.XmlEncAES256Url;
??????????????????????? break;
??????????????? }
??????????? }
??????????? edElement.EncryptionMethod = new EncryptionMethod(encryptionMethod);
??????????? edElement.CipherData.CipherValue = encryptedElement;
??????????? EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);
??????????? doc.Save(filename);
??????? }
接下來就是在界面上添加button按鈕,以便瀏覽你要操作的文件。
? private void btnBrowse_Click(object sender, RoutedEventArgs e)
??????? {
??????????? FolderBrowserDialog FBD = new FolderBrowserDialog();
??????????? FBD.Description = "請選擇一個路徑";
??????????? if (FBD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
??????????? {
??????????????? txtBrowse.Text = FBD.SelectedPath;
??????????? }
??????? }
然后添加相應的加密解密按鈕,對瀏覽到的文件進行加密或者解密。
??? private void btnEncrypt_Click(object sender, RoutedEventArgs e)
??????? {
??????????? string path = txtBrowse.Text;
??????????? DirectoryInfo theFolder = new DirectoryInfo(path);
??????????? FileInfo[] fileInfo = theFolder.GetFiles();
??????????? foreach (FileInfo NextFile in fileInfo)? //遍歷文件
??????????? {
??????????????? Encrypt(NextFile.FullName);
??????????? }
??????? }
??????? private void btnDecrypt_Click(object sender, RoutedEventArgs e)
??????? {
??????????? string path = txtBrowse.Text;
??????????? DirectoryInfo theFolder = new DirectoryInfo(path);
??????????? FileInfo[] fileInfo = theFolder.GetFiles();
??????????? foreach (FileInfo NextFile in fileInfo)? //遍歷文件
??????????? {
??????????????? Decrypt(NextFile.FullName);
??????????? }
??????? }
后來博主為了練手,有添加一個改變文件后綴的功能:
??????? private void btnChangeFormat_Click(object sender, RoutedEventArgs e)
??????? {
??????????? string destinationFormat = txtDestFormat.Text;
??????????? string path = txtBrowse.Text;
??????????? DirectoryInfo theFolder = new DirectoryInfo(path);
??????????? FileInfo[] fileInfo = theFolder.GetFiles();
??????? ?
??????????? foreach (FileInfo NextFile in fileInfo)? //遍歷文件
??????????? {
??????????????? string s = System.IO.Path.ChangeExtension(NextFile.FullName, destinationFormat);
??????????????? File.Move(NextFile.FullName, s);
??????????? }
??????? }
好了,功能基本實現了。在這里就不截圖軟件的界面了,如果有需要的小伙伴可以留言
總結
以上是生活随笔為你收集整理的XML 文件加密与解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 夏令时区_java中的夏令时
- 下一篇: 智慧养老解决方案-最新全套合集