xml文件加密和解密
- XML介绍
Extensible Markup Language(XML),可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
XML文件特征如下:
a) XML第一行是声明, 格式如下:<?xml?> <?xml version=“1.0” encoding=“utf-8”?>
b) XML必须有根元素: 一个文件只能有一个根元素, 含开始和结束
c) XML大小写敏感
d) XML文件的嵌套元素,含有父元素和子元素
e) XML元素的属性必须用引号。
一个典型的XML文件如下:
<?xml version="1.0" encoding="UTF-8"?>-<root>-<creditcard><number>19834209</number><expiry>02/02/2002</expiry></creditcard></root>
2. 加密、解密算法介绍
常用的加密算法主要有两大类,一类是数据校验型,另一类是数据转移型。数据校验型主要加密算法有:MD5、SHA-1。数据转移型型主要加密算法有:AES和RSA。
对于MD5和SHA-1型加密算法,主要是使用了哈希算法(Hash algorithm),哈希算法是将任意长度的输入变成固定长度(32位、64位、128位等)输出的算法 (哈希/散列),是一种不可逆算法。如下图
AES(Advanced Encryption Standard, 高级对称加密算法)和RSA: 3 MIT researchers (Ron Rivest, Adi Shamir, Leonard Adleman) 非对称加密算法。是一种可逆算法。两者主要区别是对于对称加密算法,其公钥和私钥是同一个密钥,而对于非对称加密算法,其公钥和私钥不是同一个密钥。
3. 对称加密算法(AES)
加密算法:
public static void Encrypt(XmlDocument Doc, string ElementName, SymmetricAlgorithm Key){// check the arguments.if (Doc == null){throw new ArgumentNullException("Doc");}if (ElementName == null){throw new ArgumentNullException("ElementToEncrypt");}if (Key == null){throw new ArgumentNullException("Alg");}// find the specified element in the XmlDocument// object and create a new XmlElement objectXmlElement elementToEncrypt = Doc.GetElementsByTagName(ElementName)[0] as XmlElement;// throw an XmlException if the element was not found.if (elementToEncrypt == null){throw new XmlException("The specified element was not found");}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;}}else{throw new CryptographicException("The specified algorithm is not supported for XML Encryption.");}edElement.EncryptionMethod = new EncryptionMethod(encryptionMethod);edElement.CipherData.CipherValue = encryptedElement;EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);}
解密算法:
public static void Decrypt(XmlDocument Doc, SymmetricAlgorithm Alg){if (Doc == null)throw new ArgumentNullException("Doc");if (Alg == null)throw new ArgumentNullException("Alg");XmlElement encryptedElement = Doc.GetElementsByTagName("EncryptedData")[0] as XmlElement;if (encryptedElement == null){throw new XmlException("The EncryptedData element was not found.");}EncryptedData edElement = new EncryptedData();edElement.LoadXml(encryptedElement);EncryptedXml exml = new EncryptedXml();byte[] rgbOutput = exml.DecryptData(edElement, Alg);exml.ReplaceData(encryptedElement, rgbOutput);}
图一的XML文件加密后的XML如下:
<?xml version="1.0" encoding="UTF-8"?>-<root>-<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element"><EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>-<CipherData><CipherValue>+X2fHiwxzCKbqu1TKXth5m7MsY2dCuCFut0YIRwk/kJ+UQmWmNaRV5TM9gJ7BpJC6vWG9z/Dv7q6CN1S9ko2PF70XNRqAX8KLsYUlUGORvXrSOYJu3vP0pVpJWDiP02/mXB9Cnd2QAjtiHjvT4RnqQ==</CipherValue></CipherData></EncryptedData></root>
xml文件加密和解密相关推荐
- XML 文件加密与解密
做这个小程序实属无奈,客户担心文件泄露,要求我们加密,其实都不是什么重要的文件,纯属是客户给我们加工作量,但是也算是学到了一些东西,因此博主对客户的感情掺杂这爱与恨吧.下面看看我的程序吧,其实很简单, ...
- tkinter实现文件加密和解密
源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...
- Java基础篇之利用IO流给文件加密、解密
目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...
- (C语言)简单的文件加密和解密程序
一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...
- 文件加密和解密 - 密钥存储
当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...
- Linux下使用Vim/Vi给文件加密和解密
本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...
- 文件加密和解密软件:AutoCrypt for mac
为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...
- Unity对XML文件加密
ResourceFrom:http://www.unitymanual.com/thread-28231-1-1.html 问题:为什么要对xml加密,众所周知的对于一些客户端的游戏或者是单机游戏,x ...
- 文件加密及解密openssl
Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...
最新文章
- ubuntu设置字体编码GBK和UTF-8
- Oracle 基础知识——客户端连接oracle数据库服务端的四种方法
- poj 1932(spfa判断环)
- UITableView从storyBoard加载UITableViewCell的细节以及布局内边距问题
- iOS UITextField使用全攻略
- 【BZOJ3590】[Snoi2013]Quare 状压DP
- 安卓添加滚轮代码_iPhone为什么都不会中病毒?安卓默默退出群聊
- xSeries 232双机热备份配置(塔式)
- JavaScript 函数(方法)的封装技巧要领及其重要性
- echo 在shell及脚本中显示色彩及闪烁警告效果
- airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
- django html传递数组,django将数组传递给前台模板的方法
- 一次惨痛的微软AA面经历
- office2007设置默认粘贴为选择性粘贴
- 消防工程师 11.灭火器2 12.消防用电
- latex如何设置字体并加粗_LaTex中文字体加粗的问题
- 麒麟子再放大招,据传幼麟棋牌全部版本将开源!
- 计算机组成原理-第一章 计算机系统概述(详细知识点总结)
- Lock wait timeout exceeded; try restarting transaction
- 【微信小程序经验】各类图表相关组件+Demo源码(折线图,柱状图,K线,分时图)