您的位置:首页 > 编程语言 > C#

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

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

文件数据加密

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 frame
void Update () {

}
}


测试结果如下图所示,



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

其实加密解密还有很多种方式,这只是其中的一种。大家如果有加密解密这一块的博客或者别的,可以留言给我,大家一起交流,一起进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: