欢迎使用CSDN-markdown编辑器
来源:互联网 发布:超市购物篮数据下载 编辑:程序博客网 时间:2024/06/06 12:26
C# 基于Rijndael加密算法对XML文档加密和解密
参考资料
AES 和Des 对称加密
PaddingMode枚举详解
CipherMode 枚举详解
unity工程代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor ;
using System .Xml;
using System .Text ;
using System .Security .Cryptography ;
using System;
using System.IO;
public class StartXml {
static StartXml _instance;
public static StartXml Instance{
get {
if (_instance == null ){
_instance = new StartXml ();
}
return _instance;
}
}
/// <summary>/// 创建XML文档/// <param name="FileName">XML file Name.</param>/// </summary>public void CreateXML(string FileName ){ XmlDocument doc; XmlDeclaration dec; doc = new XmlDocument (); dec = doc.CreateXmlDeclaration ("1.0","UTF-8", null ); doc .AppendChild (dec ); XmlElement item = doc.CreateElement ("Levels"); doc.AppendChild (item); string SavePath = Application .dataPath + "/"+FileName +".xml"; doc.Save (SavePath ); AssetDatabase.Refresh ();}/// <summary>/// 增加XML数据/// </summary>/// <param name="FileName">XML file Name.</param>/// <param name="name"> 数据名称(第几关).</param>/// <param name="value">数据的值(几颗星).</param>public void SaveXMLData( string FileName,string name,string value){ if (HasXMLData ( FileName ,name)) { ChangeXMLData (FileName ,name,value ); } else { string v = RijndaelEncrypt (value); //数据加密 string SavePath = Application .dataPath + "/"+FileName +".xml"; XmlDocument doc = new XmlDocument (); doc.Load (SavePath ); XmlNode root= doc.SelectSingleNode ("Levels"); XmlElement LevelName =doc.CreateElement ( name); root .AppendChild (LevelName ); XmlAttribute LevelValue =doc .CreateAttribute ( "StarNum"); LevelValue.Value = v; LevelName.SetAttributeNode (LevelValue ); doc.Save (SavePath ); AssetDatabase.Refresh (); }}/// <summary>/// 更改数据/// </summary>/// <param name="FileName">XML file Name.</param>/// <param name="name">Name.</param>/// <param name="value">Value.</param>public void ChangeXMLData(string FileName, string name, string value ){ string v = RijndaelEncrypt (value); //数据加密 string SavePath = Application .dataPath + "/"+FileName +".xml"; XmlDocument doc = new XmlDocument (); doc.Load (SavePath ); XmlNode root = doc.SelectSingleNode ("Levels"); XmlNodeList list = root.ChildNodes; foreach (XmlNode item in list ) { XmlElement Xe= (XmlElement ) item; if (Xe.Name == name ){ Xe.Attributes ["StarNum"].Value = v;
// Debug.Log (Xe.GetAttribute (“StarNum”) );
}
}
doc.Save (SavePath );
AssetDatabase.Refresh ();
}
///
/// 查询是否存在这个值///
/// true if this instance has XML data the specified FileName name; otherwise, false.
/// XML file Name.
/// Name.
public bool HasXMLData(string FileName, string name ){
string SavePath = Application .dataPath + “/”+FileName +”.xml”;
XmlDocument doc = new XmlDocument ();
doc.Load (SavePath );
XmlNode root = doc.SelectSingleNode (“Levels”);
XmlNodeList list = root.ChildNodes;
foreach (XmlNode item in list ) {
XmlElement Xe= (XmlElement ) item;
if (Xe.Name == name ){
return true;
}
}
return false;
}
/// <summary>/// 查询XML数据的条数/// </summary>/// <returns>The length of xml data .</returns>/// <param name="FileName">XMLFile name.</param>public int GetXmlLength(string FileName){ string SavePath = Application .dataPath + "/"+FileName +".xml"; XmlDocument doc = new XmlDocument (); doc.Load (SavePath ); XmlNode root = doc.SelectSingleNode ("Levels"); XmlNodeList list = root.ChildNodes; return list.Count;}/// <summary>/// 读取Xml文档/// </summary>/// <returns> 星星的个数.</returns>/// <param name="FileName">XML file Name.</param>/// <param name="name"> 查找的关数.</param>public int ReadXMLData(string FileName,string name ){ string SavePath = Application .dataPath + "/"+FileName +".xml"; XmlDocument doc = new XmlDocument (); doc.Load (SavePath ); XmlNode root = doc.SelectSingleNode ("Levels"); XmlNodeList list = root.ChildNodes; foreach (XmlNode item in list ) { XmlElement Xe = (XmlElement) item; if(Xe.Name == name ){ string j = RijndaelDecrypt(Xe.GetAttribute ("StarNum")); return int .Parse (j) ; } } return 0;}/// Rijndael加密算法////// 待加密的明文/// 密钥,长度可以为:64位(byte[8]),128位(byte[16]),192位(byte[24]),256位(byte[32])/// iv向量,长度为128(byte[16])///private static string RijndaelEncrypt(string pString){ //密钥 byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); //待加密明文数组 byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(pString); //Rijndael解密算法 RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); //返回加密后的密文 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length);}/// <summary>/// Rijndaels the encrypt./// </summary>/// <returns>The encrypt.</returns>/// <param name="pString">待加密文本.</param>/// <param name="mode">加密模式.</param>public static string RijndaelEncrypt(string pString,CipherMode mode){ //密钥 byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); //待加密明文数组 byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(pString); //Rijndael解密算法 RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = mode; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateEncryptor(); //返回加密后的密文 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return Convert.ToBase64String(resultArray, 0, resultArray.Length);}/// ijndael解密算法////// 待解密的密文/// 密钥,长度可以为:64位(byte[8]),128位(byte[16]),192位(byte[24]),256位(byte[32])/// iv向量,长度为128(byte[16])///private static String RijndaelDecrypt(string pString){ //解密密钥 byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012"); //待解密密文数组 byte[] toEncryptArray = Convert.FromBase64String(pString); //Rijndael解密算法 RijndaelManaged rDel = new RijndaelManaged(); rDel.Key = keyArray; rDel.Mode = CipherMode.ECB ; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); //返回解密后的明文 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return UTF8Encoding.UTF8.GetString(resultArray);}/// <summary>/// /// </summary>/// <returns>The decrypt.</returns>/// <param name="pString">带解密的文本.</param>/// <param name="mode">加密的模式.</param>public static string RijndaelDecrypt(string pString ,CipherMode mode){ byte[] toDecrypt =Convert.FromBase64String (pString ); byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("12348578902223367877723456789012"); RijndaelManaged rDel = new RijndaelManaged (); rDel.Key = keyArray; rDel.Mode = mode; rDel.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = rDel.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock (toDecrypt ,0,toDecrypt .Length ); return UTF8Encoding.UTF8.GetString (resultArray );}
}
“`
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- GPLT-古风排版
- Machine Learning第三讲[Logistic回归] --(二)Logistic回归模型
- iOS中respondsToSelector方法的作用
- CSS hack IE常见兼容性问题
- Mathtype 常用快捷键
- 欢迎使用CSDN-markdown编辑器
- Android mvc & mvp
- Linux下的QQ
- Factors in Finetuning Deep Model for Object Detection with Long-tail Distribution解读
- 第八周:[Leetcode]5. Longest Palindromic Substring
- Java数据集合-学习总结
- 九个隐含JSP对象
- Apache common collection的使用(1)
- orcale库表增加一个字段,自动设置为系统默认时间