Unity DES AES加密数据 序列化和反序列化 通用方法
来源:互联网 发布:linux 查看登陆用户 编辑:程序博客网 时间:2024/06/05 00:27
using UnityEngine;using System.Collections.Generic;using System.IO;using System.Security.Cryptography;using System.Text;using System.Xml.Serialization; public class SerializeTest : MonoBehaviour{ //keyVal输入32位,ivVal为16位 static string keyVal = "qsedcvfrgthjuiklopoiuytrfgbvcdew"; static string ivVal = "124578963axswedr"; void Start() { List<Information> serList = new List<Information>(); string path = @"Test.xml"; //赋值 for (int i = 0; i < 5; i++) { serList.Add(new Information("名字" + i, 20 + i)); } GeneralSerialize(serList, path, keyVal, ivVal); //XMLSerialize(serList, path); //List<Information> serTest = XMLDeserialize<List<Information>>(path); List<Information> serTest = GeneralDeserialize<List<Information>>(path, keyVal, ivVal); //输出返回的值 foreach (var temp in serTest) { Debug.Log(temp.name); Debug.Log(temp.age); } } /// <summary> /// 加密序列化 /// </summary> /// <param name="obj">要序列化的对象</param> /// <param name="path">保存路径</param> /// <param name="key">密钥值</param> /// <param name="iv">加密辅助向量</param> /// <returns></returns> void GeneralSerialize<T>(T obj, string path, string key, string iv) { if (string.IsNullOrEmpty(path)) return; //32位 key = "qwertyuiopasdfghqwertyuiopasdfgh"; //16位 iv = "qwertyuiopasdfgh"; using (var fileStream = File.Create(path)) { //AES加密 Rijndael aes = Rijndael.Create(); aes.Key = Encoding.UTF8.GetBytes(ivVal.Length >= 32 ? ivVal.Substring(0, 32) : key); aes.IV = Encoding.UTF8.GetBytes(ivVal.Length >= 16 ? ivVal.Substring(0, 16) : iv); //DES加密 //DESCryptoServiceProvider des = new DESCryptoServiceProvider() //{ // Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : key.Substring(0, 8)), // IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : iv.Substring(0, 8)) //}; //加密流,如果是AES加密aes.CreateEncryptor(),DES加密des.CreateEncryptor() CryptoStream crStream = new CryptoStream(fileStream, aes.CreateEncryptor(), CryptoStreamMode.Write); XmlSerializer xs = new XmlSerializer(typeof(T)); xs.Serialize(crStream, obj); aes.Clear(); crStream.Close(); fileStream.Close(); } } /// <summary> /// 加密反序列化 /// </summary> /// <param name="path">路径</param> /// <param name="key">密钥值</param> /// <param name="iv">加密辅助向量</param> /// <returns></returns> T GeneralDeserialize<T>(string path, string key, string iv) { if (string.IsNullOrEmpty(path)) return default(T); //32位 key = "qwertyuiopasdfghqwertyuiopasdfgh"; //16位 iv = "qwertyuiopasdfgh"; using (var fileStream = File.OpenRead(path)) { //AES加密 Rijndael aes = Rijndael.Create(); aes.Key = Encoding.UTF8.GetBytes(ivVal.Length >= 32 ? ivVal.Substring(0, 32) : key); aes.IV = Encoding.UTF8.GetBytes(ivVal.Length >= 16 ? ivVal.Substring(0, 16) : iv); //DES加密 //DESCryptoServiceProvider des = new DESCryptoServiceProvider() //{ // Key = Encoding.ASCII.GetBytes(keyVal.Length > 8 ? keyVal.Substring(0, 8) : key.Substring(0, 8)), // IV = Encoding.ASCII.GetBytes(ivVal.Length > 8 ? ivVal.Substring(0, 8) : iv.Substring(0, 8)) //}; //加密流,如果是AES加密aes.CreateEncryptor(),DES加密des.CreateEncryptor() CryptoStream crStream = new CryptoStream(fileStream, aes.CreateDecryptor(), CryptoStreamMode.Read); XmlSerializer xs = new XmlSerializer(typeof(T)); T retObj = (T)xs.Deserialize(crStream); aes.Clear(); crStream.Close(); fileStream.Close(); return retObj; } } //未加密序列化 void XMLSerialize<T>(T obj, string path) { if (string.IsNullOrEmpty(path)) return; XmlSerializer xs = new XmlSerializer(typeof(T)); Stream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite); xs.Serialize(fs, obj); fs.Flush(); fs.Close(); fs.Dispose(); } //未加密反序列化 T XMLDeserialize<T>(string path) { if (string.IsNullOrEmpty(path)) return default(T); XmlSerializer xs = new XmlSerializer(typeof(T)); Stream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite); T serTest = (T)xs.Deserialize(fs); fs.Flush(); fs.Close(); fs.Dispose(); return serTest; }} [XmlType("人员信息")]public class Information{ [XmlAttribute("名字")] public string name; [XmlAttribute("年龄")] public int age; public Information(string name, int age) { this.name = name; this.age = age; } //必须要有 public Information() { }}
阅读全文
0 0
- Unity DES AES加密数据 序列化和反序列化 通用方法
- Unity RSA 加密数据 序列化和反序列化 通用方法
- Unity 数据 序列化和反序列化 通用方法
- 数据 序列化和反序列化 通用方法
- 序列化和反序列化方法
- 序列化和反序列化方法
- 序列化和反序列化方法
- Unity 中使用C#的序列化和反序列化处理游戏数据
- 【Unity&JSON】.net JSON 数组 序列化和反序列化,并 创建玩家数据列表
- unity Dictionary序列化和反序列化及XML本地数据存储
- Unity XML的序列化和反序列化
- SimpleJSON在unity端序列化和反序列化
- Unity 中XML序列化和反序列化
- Unity Json的序列化和反序列化
- unity序列化和反序列XML,并添加属性
- 序列化加密/反序列化解密
- 序列和反序列化
- 序列和反序列化
- Ajax 完整教程
- 基于vue.js的分页插件
- C# WinForm窗口最小化到系统托盘右击托盘图标弹出退出菜单
- [总结]FFMPEG视音频编解码零基础学习方法
- 深入理解C语言的函数调用过程
- Unity DES AES加密数据 序列化和反序列化 通用方法
- 【PAT甲级】1075. PAT Judge (25)
- echarts之tooltip-trigger
- 【ShareSDK】Unity3d 使用ShareSDK 做安卓分享
- HashSet的实现
- Linux 通配符 及特殊字符 $、\、`、
- Selenium学习笔记19-操作控件设置高亮
- 一次完整的自动化测试-2017-7-4
- 第一次的博客