C# 文件数据加密以及解密

来源:互联网 发布:淘宝助理字体大小设置 编辑:程序博客网 时间:2024/05/07 21:48

之前做的一个项目上线后听说被破解了,很伤心!赶紧把以前学过的文件加密解密的半吊子赶紧拉出来研究研究。


文件数据加密

public static string AddLock(string info,string lockKey) {        byte[] key = UTF8Encoding.UTF8.GetBytes(lockKey);        RijndaelManaged rDel = new RijndaelManaged();        rDel.Key = key;//获取或设置对称算法密匙        rDel.Mode = CipherMode.ECB;//获取或设置对称算法模式        rDel.Padding = PaddingMode.PKCS7;//获取或设置对称算法中使用的填充模式            byte[] EncryptorString = UTF8Encoding.UTF8.GetBytes(info);        ICryptoTransform cTransform = rDel.CreateEncryptor();//用当前设置好的属性创建对称加密器        //加密        byte[] back = cTransform.TransformFinalBlock(EncryptorString, 0, EncryptorString.Length);        //转换为string类型方便存储        string end = System.Convert.ToBase64String(back, 0, back.Length);        return end;    }

文件数据解密

public static string RemoveLock(string info, string lockKey)    {        byte[] key = UTF8Encoding.UTF8.GetBytes(lockKey);        RijndaelManaged rDel = new RijndaelManaged();        rDel.Key = key;//获取或设置对称算法密匙        rDel.Mode = CipherMode.ECB;//获取或设置对称算法模式        rDel.Padding = PaddingMode.PKCS7;//获取或设置对称算法中使用的填充模式         //创建解密器------注意解密器的属性(密匙,算法模式,填充模式等)需与加密时的一致--        ICryptoTransform cTransform = rDel.CreateDecryptor();        byte[] EncryptorString = System.Convert.FromBase64String(info);        //解密        byte[] back = cTransform.TransformFinalBlock(EncryptorString, 0, EncryptorString.Length);                //转换为string类型方便使用        string end = UTF8Encoding.UTF8.GetString(back);        return end;    }

下面在来一段加密解密整理后的代码,懒一点的可以拿出去直接使用。

using UnityEngine;using System.Collections;using System.Security.Cryptography;using System.Text;public static class FileToLock {    private static string lockKey = "12340578906543367877723456789012";    private static RijndaelManaged rDel;    static FileToLock() {        byte[] key = UTF8Encoding.UTF8.GetBytes(lockKey);        rDel = new RijndaelManaged();        rDel.Key = key;//获取或设置对称算法密匙        rDel.Mode = CipherMode.ECB;//获取或设置对称算法模式        rDel.Padding = PaddingMode.PKCS7;//获取或设置对称算法中使用的填充模式            }    public static string AddLock(string info) {        if (string.IsNullOrEmpty(info))        {            return info;        }        byte[] EncryptorString = UTF8Encoding.UTF8.GetBytes(info);        ICryptoTransform cTransform = rDel.CreateEncryptor();//用当前设置好的属性创建对称加密器        //加密        byte[] back = cTransform.TransformFinalBlock(EncryptorString, 0, EncryptorString.Length);        //转换为string类型方便存储        string end = System.Convert.ToBase64String(back, 0, back.Length);        return end;    }    public static string RemoveLock(string info)    {        if (string.IsNullOrEmpty(info))        {            return info;        }        //创建解密器------注意解密器的属性(密匙,算法模式,填充模式等)需与加密时的一致--        ICryptoTransform cTransform = rDel.CreateDecryptor();        byte[] EncryptorString = System.Convert.FromBase64String(info);        //解密        byte[] back = cTransform.TransformFinalBlock(EncryptorString, 0, EncryptorString.Length);                //转换为string类型方便使用        string end = UTF8Encoding.UTF8.GetString(back);        return end;    }}


这是一个静态类,关于静态类有不清楚的地方可以点击 C# 静态类与非静态类、静态成员的区别,这里就不再多说了。
我来测试一下,我谢了个测试脚本。

using UnityEngine;using System.Collections;public class TestGameData : MonoBehaviour {// Use this for initialization    void Start()    {        string str = "Hello,World!我是要加密的字符串";        Debug.Log("加密之前的字符串 -->" + str);        str = FileToLock.AddLock(str);        Debug.Log("加密之后的字符串 -->" + str);        Debug.Log("解密之前的字符串 -->" + str);        str = FileToLock.RemoveLock(str);        Debug.Log("解密之后的字符串 -->" + str);    }// Update is called once per framevoid Update () {        }}


测试结果如下图所示,


结果果然在意料之中,嘿嘿。

其实加密解密还有很多种方式,这只是其中的一种。大家如果有加密解密这一块的博客或者别的,可以留言给我,大家一起交流,一起进步。


0 0
原创粉丝点击