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文件加密和解密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 爬虫 微博 github_
- 下一篇: GMAP.NET应用及离线地图加载