xml文件加密解密类(直接添加到工程)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// 要在工程里添加 System.Security 的引用集
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; //XML Namespace
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;//xml encryption namespace
using System.Windows.Forms; //Application namespace

namespace myown
{
class encryption_and_dcryption
{
//xml加密方法
private void Encrypt(XmlDocument Doc, string ElementName, SymmetricAlgorithm Key)
{
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);
}

//xml解密方法
private void Decrypt(XmlDocument Doc, SymmetricAlgorithm Alg)
{
XmlElement encryptedElement = Doc.GetElementsByTagName("EncryptedData")[0] as XmlElement;
EncryptedData edElement = new EncryptedData();
edElement.LoadXml(encryptedElement);
EncryptedXml exml = new EncryptedXml();
byte[] rgbOutput = exml.DecryptData(edElement, Alg);
exml.ReplaceData(encryptedElement, rgbOutput);
}

//对相应xml文件 加密
public void fileEncryption(string presentuser)
{
RijndaelManaged key = new RijndaelManaged();
//设置密钥:key为32位=数字或字母16个=汉字8个
byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111");//every load get time as key
key.Key = byteKey;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespac

e = true;
xmlDoc.Load(Application.StartupPath + "\\" + presentuser + ".xml");//加载要加密的XML文件
Encrypt(xmlDoc, "Save", key);//需要加密的节点
if (key != null)
{
key.Clear();
}
xmlDoc.Save(Application.StartupPath + "\\en" + presentuser + ".xml");//生成加密后的XML文件
//MessageBox.Show("OK");
}

//对相应xml文件 解密
public void fileDcryption(string presentuser)
{
RijndaelManaged key = new RijndaelManaged();
//设置密钥:key为32位=数字或字母16个=汉字8个
byte[] byteKey = Encoding.Unicode.GetBytes("1111111111111111");
key.Key = byteKey;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load(Application.StartupPath + "\\en" + presentuser + ".xml");//加载要解密的XML文件
Decrypt(xmlDoc, key);
if (key != null)
{
key.Clear();
}
xmlDoc.Save(Application.StartupPath + "\\" + presentuser + ".xml");//生成解密后的XML文件
// MessageBox.Show("OK");
}
}
}


相关文档
最新文档