1. 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>
XML 与 HTML的区别: 同属标记语言, XML起保存、传输数据作用; HTML网页语言, 起显示作用。

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文件加密和解密相关推荐

  1. XML 文件加密与解密

    做这个小程序实属无奈,客户担心文件泄露,要求我们加密,其实都不是什么重要的文件,纯属是客户给我们加工作量,但是也算是学到了一些东西,因此博主对客户的感情掺杂这爱与恨吧.下面看看我的程序吧,其实很简单, ...

  2. tkinter实现文件加密和解密

    源代码:https://gitee.com/mydreamambitious/file-encryption-and-decryption 注:这个代码和界面是做好的,但是还在进行优化和美化中.但是在 ...

  3. Java基础篇之利用IO流给文件加密、解密

    目标:给文件加密.解密(最基础版) 注意: a.加密过程:先读取整个目标文件,然后将目标文件写入一个新的文件中,在写入的过程中,每隔几个字符插入一个加密符号(随意定),此时这个新的文件就是加密文件 b ...

  4. (C语言)简单的文件加密和解密程序

    一个简单的文件加密和解密程序 main.c #include <stdio.h> #include <stdlib.h> #include "fun.h"i ...

  5. 文件加密和解密 - 密钥存储

    当我们想要做一次加密系统,或者只是有一个关于这个问题,它是如何保存的加密和解密密钥. 一般认为想要的文件加密和解密,对称算法用于.一般是AES要么DES. 这就存在密钥管理的问题,它是如何? 基本上两 ...

  6. Linux下使用Vim/Vi给文件加密和解密

    本文介绍在Linux下使用Vim/Vi给文件加密和解密的简单方法,Vim的文件加密功能不是很强,但比较实用,因为不必要借助其他软件即可实现. 一. 用 Vim/Vi 加密文件: 用 Vim/Vi 加密 ...

  7. 文件加密和解密软件:AutoCrypt for mac

    为大家推荐一款好用的文件加密和解密软件,AutoCrypt for mac具备强大的AES-256算法,只需点击一下,即可加密并保存在自定义位置,能够轻松帮助用户加密或解密文件,而且autocrypt ...

  8. Unity对XML文件加密

    ResourceFrom:http://www.unitymanual.com/thread-28231-1-1.html 问题:为什么要对xml加密,众所周知的对于一些客户端的游戏或者是单机游戏,x ...

  9. 文件加密及解密openssl

    Openssl是一个开源的用以实现SSL协议的产品,它主要包括了三个部分:密码算法库.应用程序.SSL协议库.Openssl实现了SSL协议所需要的大多数算法. 下面我将单介绍使用Openssl进行文 ...

最新文章

  1. ubuntu设置字体编码GBK和UTF-8
  2. Oracle 基础知识——客户端连接oracle数据库服务端的四种方法
  3. poj 1932(spfa判断环)
  4. UITableView从storyBoard加载UITableViewCell的细节以及布局内边距问题
  5. iOS UITextField使用全攻略
  6. 【BZOJ3590】[Snoi2013]Quare 状压DP
  7. 安卓添加滚轮代码_iPhone为什么都不会中病毒?安卓默默退出群聊
  8. xSeries 232双机热备份配置(塔式)
  9. JavaScript 函数(方法)的封装技巧要领及其重要性
  10. echo 在shell及脚本中显示色彩及闪烁警告效果
  11. airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
  12. django html传递数组,django将数组传递给前台模板的方法
  13. 一次惨痛的微软AA面经历
  14. office2007设置默认粘贴为选择性粘贴
  15. 消防工程师 11.灭火器2 12.消防用电
  16. latex如何设置字体并加粗_LaTex中文字体加粗的问题
  17. 麒麟子再放大招,据传幼麟棋牌全部版本将开源!
  18. 计算机组成原理-第一章 计算机系统概述(详细知识点总结)
  19. Lock wait timeout exceeded; try restarting transaction
  20. 【微信小程序经验】各类图表相关组件+Demo源码(折线图,柱状图,K线,分时图)

热门文章

  1. 小老虎CSDN博客流量分析
  2. 中国互联网出现数学家的科普乐园
  3. uboot.lds链接脚本分析
  4. 【NOIP2013】华容道 最短路优化搜索(spfa)
  5. Intel Hex 文件格式
  6. 北大资源燕南业主总群 326680907
  7. 计算机休眠会断电吗,电脑休眠后到底可不可以切断电源!!是还是不是啊??
  8. Cesium实现热力图(含源代码)
  9. 我的世界java村民繁殖条件,我的世界村民无限繁殖教程 教你村民怎么生孩子
  10. 华为云WeLink是什么软件?什么远程办公软件好用?