做这个小程序实属无奈,客户担心文件泄露,要求我们加密,其实都不是什么重要的文件,纯属是客户给我们加工作量,但是也算是学到了一些东西,因此博主对客户的感情掺杂这爱与恨吧。下面看看我的程序吧,其实很简单,主要是用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);
}
}
好了,功能基本实现了。在这里就不截图软件的界面了,如果有需要的小伙伴可以留言
手机扫一扫
移动阅读更方便
你可能感兴趣的文章