为你的游戏存档加个密(C#)

前言

因为最近在做两款开源(暂时)的游戏,渐渐也做到了存档系统部分

因为看见很多人会从存档下手来作弊(虽然我也喜欢作弊,但是自己做的游戏还是不希望被别人轻而易举的破了)

然后就想着是否能进行加密处理

在网上找了些资料后就决定用 AES 加密来加密 json 存档了 qwq(其实严格来说是 Rijndael)

不多 bb,直接上代码

/***********************
/ Rijndael加密算法使用
/ 加密:RijndaelCrypt(dataToStore, encryptionCodeWord,false);
/ 解密:RijndaelCrypt(dataToLoad, encryptionCodeWord.true);
/ 密钥,长度可以为:64位(8字节),128位(16字节),192位(24字节),256位(32字节)
***********************/

private static string RijndaelCrypt(string pString, string pKey,bool Decrypt)
{
//密钥
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(pKey);
//待加密/解密数据
if (Decrypt)
{
byte[] toEncryptArray = Convert.FromBase64String(pString);
}
else
{
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(pString);
}

//Rijndael解密算法
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();

//返回加密/解密后的数据
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
if (Decrypt)
{
return UTF8Encoding.UTF8.GetString(resultArray);
}
else
{
return Convert.ToBase64String(resultArray, 0, resultArray.Length);

}
}

上面就是具体加密算法,需要怎么使用也写上去了,其实可以分为 En 和 De 两个函数,但是为了节省空间就直接二合一了(其实也就是读取数据与返回数据的方式有区别)

建议密钥的长度为32 个字符,并且使用标点符号,并且 private readonly在文件中,例如

private readonly string encryptionCodeWord = "Mgs.KoAd9y^O&VKFcI2_3v<Nur07&S?%";

那么设置密钥后就可以直接调用函数来加解密了 qwq

加密:RijndaelCrypt(加密内容, encryptionCodeWord,false);

解密:RijndaelCrypt(加密内容, encryptionCodeWord,true);

其余的事情就直接丢给函数自己完成即可 qwq

[scode type=”green” size=””]最后的效果应该像这样image.png[/scode]