加密的xml
1. C# 加密、解密 XML 文件操作
以下给出里两种加密方法1,MD5 ;2,RSA
MD5加密如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace 数据加密与解密
{
public partial class frmMD5 : Form
{
public frmMD5()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{ MessageBox.Show("请输入加密数据"); return; }
MD5CryptoServiceProvider M5 = new MD5CryptoServiceProvider();
textBox2.Text = ASCIIEncoding.ASCII.GetString(M5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(textBox1.Text)));
}
//MD5是不可的算法。破解只有用暴力破解法
private void button2_Click(object sender, EventArgs e)
{
MD5CryptoServiceProvider M5 = new MD5CryptoServiceProvider();
//this.textBox3.Text=M5.
}
}
}
RSA加密如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
namespace 数据加密与解密
{
public partial class frmRSA : Form
{
public frmRSA()
{
InitializeComponent();
this.Text = "RSA加密解密";
tb_Encrypt.ReadOnly = true;
tb_Decrypt.ReadOnly = true;
}
private void button1_Click(object sender, EventArgs e)
{
//使用默认密钥创建RSACryptoServiceProvider对象
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//显示包含公钥/私钥对的XML表示形式,如果只显示公钥,将参数改为false即可
rtb_Keys.Text = rsa.ToXmlString(true);
//将被加密的字符串转换为字节数组
byte[] dataToEncrypt = Encoding.UTF8.GetBytes(tb_Input.Text);
try
{
//得到加密后的字节数组
byte[] encryptedData = rsa.Encrypt(dataToEncrypt, false);
tb_Encrypt.Text = Encoding.UTF8.GetString(encryptedData);
//得到解密后的字节数组
byte[] decryptedData = rsa.Decrypt(encryptedData, false);
tb_Decrypt.Text = Encoding.UTF8.GetString(decryptedData);
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}
}
}
}
2. 如何使用C#加密解密XML文档
可以用DES对称加/解密。XML文档读写我就简单的用一个序列化的例子了。我只写加/解/序列化,怎么显示你随意了。
1、建立一个Student的类了,四个属性
public class Student
{
public string SID { get; set; }
public string Name { get; set; }
public string Score { get; set; }
public string Address { get; set; }
}
2、在你要加/解的页面加Using
using System.Security.Cryptography;
using System.IO;
using System.Xml.Serialization;
就是序列化、加密、IO了
3、写两个方法,加/解
/// <summary>
/// DES的加密方法
/// </summary>
/// <param name="pToEncrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public string Encrypt(string pToEncrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
/// <summary>
/// DES的解密
/// </summary>
/// <param name="pToDecrypt"></param>
/// <param name="sKey"></param>
/// <returns></returns>
public string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)
{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
return System.Text.Encoding.Default.GetString(ms.ToArray()).TrimEnd('\0');
}
//上面为什么要TrimEnd,因为ms.ToArray()里面以8位为单位增长,你字符串长11位,这里就是16位,最后面是\0字符,去掉就行。
4、调用加解就很简单了。
private void button1_Click(object sender, EventArgs e)
{
string Key = "12345678"; //DES的密钥,8位字符串,不要用中文,如果要解密,这个密钥也是一样的。
List<Student> list = new List<Student>()
{
new Student(){ SID="1", Name="张三", Score="87.5", Address="A小区asfasdf"},
new Student(){ SID="2", Name="李四", Score="77.5", Address="B小区asdfsdf"},
new Student(){ SID="3", Name="王五", Score="67.5", Address="C小区23412423434535345"},
};
//假定要加密的是分数和地址
foreach (var obj in list)
{
obj.Score = Encrypt(obj.Score, Key);
obj.Address = Encrypt(obj.Address, Key);
}
XmlSerializer xs = new XmlSerializer(typeof(List<Student>)); //序列化建立xml
Stream stream = new FileStream(@"d:\12345.XML", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
xs.Serialize(stream, list);
stream.Close();
}
上面是写一些数据,然后加密两个属性:Score和Address。存到D盘
解就是反过来呀。
private void button2_Click(object sender, EventArgs e)
{
string Key = "12345678"; //DES的密钥
XmlSerializer xs = new XmlSerializer(typeof(List<Student>));
Stream stream = new FileStream(@"d:\\12345.XML", FileMode.Open, FileAccess.Read, FileShare.Read);
var str = xs.Deserialize(stream);
stream.Close();
var list = (List<Student>)str; //转回List
foreach (var obj in list)
{
obj.Score = Decrypt(obj.Score, Key);
obj.Address = Decrypt(obj.Address, Key);
}
}
其实加解密方法有好多,如果有针对整个XML文件进行压缩、加密的代码可发出来一共学习
3. 如何:用对称密钥对 XML 元素进行加密
使用
XML
加密,您可以存储或传输敏感
XML,而无需担心数据被轻易读取。
此过程使用高级加密标准
(AES)
算法(又称为
Rijndael)对
XML
元素进行解密。
当使用诸如
AES
这样的对称算法对
XML
数据进行加密时,必须使用相同的密钥对
XML
数据进行加密和解密。
此过程中的示例假定加密的
XML
将使用相同密钥进行解密,并且加密方和解密方对使用的算法和密钥达成了一致。
此示例不在加密的
XML
中存储或加密
AES
密钥。
此示例适合于以下情形:单个应用程序需要基于存储在内存中的会话密钥,或基于从密码派生的加密强密钥对数据进行加密。
4. c#加密xml文件
xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称加密的方法加密xml 这种加密方法只使用一个密钥,也就是说无论是加密xml还是解密xml都使用一个相同的密钥。因为这个密钥不会在被加密的xml中保存,所以我们需要在加密和解密的过程中加载这个密钥并保护它不被窃取。 2、使用对称加密和非对称加密相结合的方法来加密xml 这种方法需要一个用于加密数据的对称密钥和一个用于保护这个对称密钥的非对称密钥。被加密的对称密钥和被加密的数据一起保存在xml文档中。当用私有非对称密钥解密密钥的时候要用公开非对称密钥对密钥进行加密。 本文就将使用这种方法。想学到其他更多的方法请参看MSDN等到更多的信息。 (译者注:非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。) 3、使用X.509加密xml,这种方法是用X.509作为非对称密钥,它由诸如VeriSign之类的第三方提供。 该网站有具体方法,请查阅 http://hi..com/jam12315/blog/item/42b5c4c426ee15af8326ac3b.html 参考文献: tp://dotnetslackers.com/articles/xml/XMLEncryption.aspx
满意请采纳