gpt4 book ai didi

c# - C#中的加密 key 保护

转载 作者:行者123 更新时间:2023-11-30 13:22:54 25 4
gpt4 key购买 nike

是否有解决以下问题的行业标准:

故事;我有一个程序 (=>game) 将它的状态 (=>level,..) 保存在一个 xml 文件中;这个状态不应该是用户可编辑的;我想阻止人们编写可以修补我的 xml 和程序状态的补丁软件。

您想保护您的 xml 文件。您可以通过加密来做到这一点。但是,您如何处理 key ?

因为有人总是可以逆向工程(打开您的 dll)并读取 key ...?

public static string Encrypt (string toEncrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("12345678901234567890123456789012");
// 256-AES key
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes (toEncrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
// http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
rDel.Padding = PaddingMode.PKCS7;
// better lang support
ICryptoTransform cTransform = rDel.CreateEncryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String (resultArray, 0, resultArray.Length);
}

public static string Decrypt (string toDecrypt)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes ("12345678901234567890123456789012");
// AES-256 key
byte[] toEncryptArray = Convert.FromBase64String (toDecrypt);
RijndaelManaged rDel = new RijndaelManaged ();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
// http://msdn.microsoft.com/en-us/library/system.security.cryptography.ciphermode.aspx
rDel.Padding = PaddingMode.PKCS7;
// better lang support
ICryptoTransform cTransform = rDel.CreateDecryptor ();
byte[] resultArray = cTransform.TransformFinalBlock (toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString (resultArray);
}

编辑:应用是 100% 客户端。

最佳答案

I have a program (=>game) that saves it state (=>level,..) in an xml file; this state should not be user editable; and I want to prevent people writing patch software that can patch my xml & program state. You can do this by encrypting. However what do you do with the key? Because someone can always just reverse engineer (open your dll) and read the key.

你已经提出了一个令人信服的论据,证明你想做的事是不可能的。你的论点是正确的。

安全系统旨在保护用户免受攻击者的侵害,而不是保护用户的数据免受用户本身的侵害>。

这样想:游戏是一个可以编辑状态的程序。用户可以运行游戏。 因此用户可以运行一个可以编辑状态的程序。您甚至不需要考虑 key 管理,因为整个场景根本上是不可能的。您不能既要求用户能够运行更改状态的程序,又同时禁止它

如果您真的希望游戏状态不受用户影响,那么必须提供的是:不得允许用户运行游戏。相反,游戏必须在您拥有的服务器上运行,并且用户运行一个与服务器通信的客户端。然后服务器负责确定客户端是否敌对,并确定游戏状态。

由于游戏现在在您拥有的服务器上运行,并将状态保存到您拥有的服务器,您知道用户不会编辑状态,因为他们无法运行可以编辑状态的程序所以

关于c# - C#中的加密 key 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com