开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

项目源码

关注:1181

当前位置:游戏蛮牛 资源专区 项目源码

查看: 663|回复: 6

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

[复制链接]  [移动端链接]
5熟悉之中
598/1000
排名
5935
昨日变化
3

10

主题

126

帖子

598

积分

Rank: 5Rank: 5

UID
152229
好友
0
蛮牛币
2281
威望
0
注册时间
2016-6-16
在线时间
260 小时
最后登录
2017-7-26
发表于 2016-10-26 17:45:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 wtujoxk 于 2016-10-26 17:49 编辑

数据 序列化和反序列化 通用方法
后的加密版

[C#] 纯文本查看 复制代码
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() { }
}








回复

使用道具 举报

7日久生情
2699/5000
排名
294
昨日变化
1

0

主题

575

帖子

2699

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
115647
好友
0
蛮牛币
2368
威望
0
注册时间
2015-7-28
在线时间
710 小时
最后登录
2017-7-28
发表于 2016-10-27 23:36:32 | 显示全部楼层
能分享一下,怎么使用非对称加密算法吗?

回复 支持 反对

使用道具 举报

5熟悉之中
598/1000
排名
5935
昨日变化
3

10

主题

126

帖子

598

积分

Rank: 5Rank: 5

UID
152229
好友
0
蛮牛币
2281
威望
0
注册时间
2016-6-16
在线时间
260 小时
最后登录
2017-7-26
 楼主| 发表于 2016-10-28 19:21:14 | 显示全部楼层
daguang 发表于 2016-10-27 23:36
能分享一下,怎么使用非对称加密算法吗?

已经编写了非对称的加密方法,正在审核中……

回复 支持 反对

使用道具 举报

排名
36308
昨日变化
68

0

主题

53

帖子

66

积分

Rank: 2Rank: 2

UID
196883
好友
0
蛮牛币
48
威望
0
注册时间
2017-1-31
在线时间
9 小时
最后登录
2017-3-1
发表于 2017-2-26 11:06:45 | 显示全部楼层
!!!!!!!!!!!!!!!!!!!

回复

使用道具 举报

5熟悉之中
811/1000
排名
3081
昨日变化
17

0

主题

277

帖子

811

积分

Rank: 5Rank: 5

UID
204852
好友
0
蛮牛币
1456
威望
0
注册时间
2017-2-3
在线时间
188 小时
最后登录
2017-7-27
发表于 2017-3-2 12:29:01 | 显示全部楼层
资源很丰富,感谢楼主的份享....

回复 支持 反对

使用道具 举报

5熟悉之中
558/1000
排名
4023
昨日变化
33

1

主题

193

帖子

558

积分

Rank: 5Rank: 5

UID
211750
好友
0
蛮牛币
1252
威望
0
注册时间
2017-3-13
在线时间
102 小时
最后登录
2017-7-27
发表于 2017-3-21 13:24:42 | 显示全部楼层
喜欢这种类型

回复

使用道具 举报

5熟悉之中
811/1000
排名
3081
昨日变化
17

0

主题

277

帖子

811

积分

Rank: 5Rank: 5

UID
204852
好友
0
蛮牛币
1456
威望
0
注册时间
2017-2-3
在线时间
188 小时
最后登录
2017-7-27
发表于 2017-3-27 11:30:01 | 显示全部楼层
回贴是种美德,谢谢楼主

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表