做这个小程序实属无奈,客户担心文件泄露,要求我们加密,其实都不是什么重要的文件,纯属是客户给我们加工作量,但是也算是学到了一些东西,因此博主对客户的感情掺杂这爱与恨吧。下面看看我的程序吧,其实很简单,主要是用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 文件加密与解密相关推荐

  1. xml文件加密和解密

    XML介绍 Extensible Markup Language(XML),可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言. XML文件特征如下: a) XML第一行是声明, 格式如下 ...

  2. tkinter实现文件加密和解密

    源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...

  3. Java基础篇之利用IO流给文件加密、解密

    目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...

  4. (C语言)简单的文件加密和解密程序

    一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...

  5. 文件加密和解密 - 密钥存储

    当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...

  6. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

  7. 文件加密和解密软件:AutoCrypt for mac

    为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...

  8. Unity对XML文件加密

    ResourceFrom:http://www.unitymanual.com/thread-28231-1-1.html 问题:为什么要对xml加密,众所周知的对于一些客户端的游戏或者是单机游戏,x ...

  9. 文件加密及解密openssl

    Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...

最新文章

  1. Linux下使用popen()执行shell命令
  2. POJ 3169 差分约束
  3. wordpress mysql 安装_wordpress 搭建安装教程 1 安装数据库、SQLyog
  4. 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
  5. 【jquery】ajax 请求成功后新开窗口被拦截解决方法
  6. Matplotlib图例中文乱码
  7. js 获取日期并格式化
  8. ZOJ - 4122 Triangle City(最短路+欧拉通路+思维)
  9. gradle 构建 Smack 报错:Can't find android.jar for 8 API. + steps for building android platform
  10. 大型布线:Java云应用程序缺少的技术
  11. 求逆元的两种方法+求逆元的O(n)递推算法
  12. 调试方法和技巧(zz)
  13. python沙箱逃逸小结
  14. mac安装xdebug
  15. 微信分享、极简微信分享、thinkphp微信分享、laravel微信分享、3分钟完成微信分享
  16. 太全面了!Python 编程的最好搭档—VSCode 实用指南!
  17. 2016年高中计算机考试模拟试题,2016年计算机二级考试模拟试题及答案
  18. 清华大学(深圳)吕帅课题组招收计算机领域博士后
  19. git执行任何操作都特别慢,怎么解决?
  20. 【群晖】希捷酷狼8T硬盘声音过大问题

热门文章

  1. 玩转电机驱动——A4950闭环驱动直流减速电机(Arduino)
  2. 易语言 Visual Basic 6.0 (VB6)
  3. efk集中管理npgstack集群日志
  4. Python可视化模块——Matplotlib(2)
  5. Springboot毕设项目校园二手交易平台x9zo8java+VUE+Mybatis+Maven+Mysql+sprnig)
  6. 沈阳网赛1003 HDU 5894 hannnnah_j’s Biological Test
  7. 红旗linux添加usb无线网卡,红旗6.0 怎么安装无线网卡驱动(急)
  8. OpenJudge-021:鸣人和佐助
  9. 用c语言复制程序,怎么用C程序写出一个能复制自己的程序?
  10. 使用metasploit破解ssh密码