如何使用C#加密解密XML文档

作者&投稿:象潘 (若有异议请与网页底部的电邮联系)
有人成功的使用C#读写xml并加密解密么~

下面的是读写xml的方法


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public static Hashtable ParseXml(String xml)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
XmlNode bodyNode = xmlDocument.ChildNodes[0];
Hashtable ht = new Hashtable();
if (bodyNode.ChildNodes.Count > 0)
{
foreach (XmlNode xn in bodyNode.ChildNodes)
{
ht.Add(xn.Name, xn.InnerText);
}
}
return ht;
}

xml的操作类为xmldocument,这个类用于xml的各种操作
对称加密和解密流行的有AES和DES,网上很多该加解密的实现代码
把字符串加密通过xmldocument保存到xml,再从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文件进行压缩、加密的代码可发出来一共学习


C语言主要用在哪些方面?
(1)应用软件。Linux操作系统中的应用软件都是使用C语言编写的,因此这样的应用软件安全性非常高。(2)对性能要求严格的领域。一般对性能有严格要求的地方都是用C语言编写的,比如网络程序的底层和网络服务器端底层、地图查询等。(3)系统软件和图形处理。C语言具有很强的绘图能力和可移植性,并且具备...

c语言能用来做什么?
c语言学会了能干的事情有:1、做嵌入式开发;2、写漂亮的界面;3、做服务器开发;4、可以写游戏;5、可以写驱动程序;6、可以写外挂;7、可以做视频图片流媒体处理;8、可做网页和爬虫相关的编程;9、可以进行黑客编程等等。C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的...

C语言中的计数器如何使用?
在C语言写程序输出时,要控制每行输出数据的个数,可以通过自定义计数器来完成。如:\/\/ 输出自然数1-30,每5个数为一行main(){ int i; int cnt=0; \/\/ 定义cnt用作输出数据的计数器,初始为0 for( i=1;i<=30;i++ ) \/\/ 循环30次 { printf("%5d",i); \/\/ 输出...

如何用c语言在windows平台上开发php extension
01.cd php-5.3.14\/ext\/int_ext 02.vi int_ext.c 03.#PHP_FE(confirm_int_ext_compiled, NULL) 面添加 PHP_FE(int_ext, NULL)添加:04.1. zend_function_entry int_ext_functions[] = { 05.2. PHP_FE(confirm_int_ext_compiled, NULL) \/* For testing, remove later. *\/...

如何用C语言创建和删除文件
一、创建文件:在C语言中创建文件,使用fopen函数,同时指定为只写即可。参考代码如下:\/* 函数功能: 创建文件名为s的文件。 返回值: -1 参数错误 0 创建成功 1 文件已存在 2 创建失败*\/int create_file(char *s){ FILE *fp; if(s==NULL||s[0]=='\\0') retu...

C语言sort函数如何使用
二、C语言有自有的qsort函数。功 能: 使用快速排序例程进行排序 头文件:stdlib.h 原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的...

51单片机一个工程中包含多个C文件怎么使用
比如我要用“init.c”这个文件,则头文件中除了#include"reg51.h"你还要加#include"init.c"然后如果在"init.c"中有一个函数"init()"我需要调用。我就要在main()函数之前作声明。(其实一般我们要调用一个函数,除非这个函数写在main()之前。否则我都要在main()之前做函数声明。比如在main()之前...

C语言变量的定义与使用
第一、变量定义要选择恰到好处的类型,变量的类型直接决定了它所存储的数据取值范围,这类似于我们生活中使用的各种容器,选择合适的变量类型,不但能保证数据存储安全,还能有效的节约系统资源;第二、变量的作用范围必须清楚,C语言最基本的功能单元是函数,在函数内部使用的变量是私有变量,只能在函数内部...

怎么用C语言编程设计“输入长方形的长和宽,求长方形的面积”的程序_百...
电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:int a, b;scanf("%d%d", &a, &b);printf("%d\\n", a * b);。3、编译器运行test.cpp文件,此时成功通过输入长方形的长和宽计算了面积并打印。

C语言的移位操作符使用方法
先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:int i = 1;i = i << 2; \/\/把i里的值左移2位 也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000... 0100,也就是10进制的4,所以说...

钦南区18831589731: C#使用RSA加密方式 对XML解密问题 -
萧黄诺尔: 这是因为,你是从你计算机上的密钥容器中读取密钥:cspparm.KeyContainerName = "XML_ENC_RSA_KEY";而别人计算机上根本不存在该密钥,自然无法解密.

钦南区18831589731: C#如何加密XML文件中具有指定属性的节点内容 -
萧黄诺尔: xml的操作类为xmldocument,这个类用于xml的各种操作 对称加密和解密流行的有AES和DES,网上很多该加解密的实现代码 把字符串加密通过xmldocument保存到xml,再从xml中读取出来解密使用即可.

钦南区18831589731: 怎么用c#解析XML文件 -
萧黄诺尔: System.Xml.XmlDocument dom = new System.Xml.XmlDocument(); dom.Load("file"); var node = dom.SelectSingleNode("//xpath"); var txt= node.InnerText

钦南区18831589731: 如何用C#语言解析下面这个xml文件?
萧黄诺尔: 从工具栏拖一个treeview -->选择数据源 -->添加数据源 -->选“XML文件”后确定 -->在弹出的“配置数据源”对话框的数据文件位置通过浏览选择你的XML文件,在Xpath表达式位置输入“/academe/design/team”后确定 -->编辑TreeNode数据绑定 -->选择“Title”-->添加 -->选择TextField属性为#InnerText.

钦南区18831589731: C# 编辑一个xml 文件时,怎么给这个文件加锁啊 -
萧黄诺尔: 代码中先将xml文件该为只读,然后读数据,做各种操作,然后将结果再写到xml中(当然写之前要取消这个xml的只读属性)

钦南区18831589731: c#如何对文件加密解密
萧黄诺尔: 这个也太麻烦了,我还是建议您可以下载超级加密3000试试.超级加密3000有超快和最强的文件、文件夹加密功能、数据保护功能,文件夹、文件的粉碎删除以及文件夹伪装等功能.超级加密 3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击.超级加密3000还支持加密文件的临时解密,文件加密后,双击加密文件,在弹出密码输入对话框输入正确的密码选择确定,该加密文件就处于临时解密,文件使用完毕退出以后,它自动恢复到加密状态,无需再加密.超级加密3000是一款不可多得的文件加密软件,您可以到百度上搜索超级加密3000给您的文件加密试试看.

钦南区18831589731: c# 如何给文件加密只有输入密码才可以看 -
萧黄诺尔: 一般的对文件系统的加密都是驱动层的,要用C、C++等语言来写,使用C#的话就只能是编写代码对文件进行混淆加密了,可以使用现有的对称算法 http://baike.baidu.com/view/156050.htm,或自己写一个规则进行简单的混淆

钦南区18831589731: 如何用C语言实现对xml文件的加密 -
萧黄诺尔: 把xml就当做一个普通的二进制文件 然后随便找一个加密算法 按照字节读入xml文件 然后按照加密算法进行加密转换,输出到目标文件就可以了 简单的 可以用异或方式.

钦南区18831589731: c#中怎么解析xml -
萧黄诺尔: 需要添加的命名空间:using System.Xml; 定义几个公共对象:XmlDocument xmldoc ; XmlNode xmlnode ; XmlElement xmlelem ;1,创建到服务器同名目录下的xml文件:方法一:xmldoc = new XmlDocument ( ) ;//加入XML的声明段落 ...

钦南区18831589731: c#如何解析xml这种格式 <string name="ext - id">4576</string> -
萧黄诺尔: 第一种:<string name="app_name" content="HelloWord"> 中content在这里当做元素的属性解析 第二种:<string name="ext_id">4576</string>中"4576"作为该元素的值来解析 个人建议在xml文件中少用属性(属性较少且简单例外),可用子元素代替

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网