Unity DES AES加密数据 序列化和反序列化 通用方法

原创 2017年07月04日 16:18:31
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() { }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Unity中使用DES加密数据

/// /// 加密 /// /// 需要加密的原字符串 /// 秘钥 /// public string Encrypt_UTF8(string ...

【Unity】Unity数据加密

using System; using System.Text; using System.Security.Cryptography; using System.IO; using Unity...

unity数据加密

在unity中可以使用c#自带的对称算法对数据进行加密,下面两种加密算法: 01 using System; 02 ...

Unity中添加AES加密

using UnityEngine; using System.Collections; using System; using System.IO; using System.Security.Cr...

C# AES 加密解密示例

AES 是一种对称加密算法。 相对非对称加密,对称加密解密过程速度更快, 适合大数据流实时加密解密。AES 被广泛应用于金融,政府等领域的网络传输。在这里分享一段用 .Net 自带框架 AES 算法调...

Unity 加密解密那些事(转载)

解密无非就为了 修改游戏功能数据、提取游戏资源、加入自己想加的广告... 加密就是保护游戏不被恶意修改,我经常看到有人说:”加什么密,你以为自己写的代码很NB?见不得人?“。 我只想说,加密并不是...

Android加密和解密(DES,AES,MD5)

加密是通过加密算法和加密密钥将明文转变为密文的过程,解密是其逆过程。加密算法有很多种,一般可以分为对称加密(如DES、AES等)、非对称加密(如RSA等)和单向加密(如MD5等)3类算法。 1)...

Unity 3D 文件加密下 AES的加密解密使用

版本:unity 5.4.1  语言:C#   这本书有点蛋疼,说了配置文件的读取之后,他说了两种算法: //OBFS 加密算法 private static string OBFS(strin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)