3

次の問題を解決するための業界標準はありますか?

話; 状態 (=> レベル、..) を xml ファイルに保存するプログラム (=> ゲーム) があります。この状態はユーザーが編集できません。そして、私のxmlとプログラムの状態にパッチを当てることができるパッチソフトウェアを書く人を防ぎたいです。

xml ファイルを保護したい。暗号化することでこれを行うことができます。しかし、あなたは鍵をどうしますか?

誰かがいつでもリバース エンジニアリング (DLL を開く) を実行してキーを読み取ることができるため...?

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% クライアント側です。

4

3 に答える 3

4

Yes, you ask the user for a key (password). This is built into the OS with APIs like Data Protection API.

If you're looking for a way to hide a secret from the user then the problem you're trying to solve is called DRM (Digital Rights Management) and you need a DRM solution.

于 2013-06-12T15:18:14.987 に答える
-1

ユーザー固有のキーを生成するユーザー アカウント サービスを作成します。その後、アプリケーションは、保護したい機密データを暗号化および復号化するだけで済みます。ゲームが実行されるたびに、ユーザーは自分のアカウントにログインします。キーがユーザーのマシンに保存されることはないため、データは比較的安全です (少なくともアカウント サービスとほぼ同じくらい安全です)。

欠点: ゲームをプレイするにはインターネット接続が必要ですが、最近接続していない人はいますか?

これは 100% 安全ですか? いいえ、十分な時間がある決心したユーザーは、保存したゲームをもっともらしく復号化できます. もちろん、彼は保存したゲームのみをハッキングできるため、被害は最小限に抑えられます (ハッキングされたデータがユーザー固有のものであり、共有データではない場合)。

さらに困難にするために、特定のユーザーが数回ログインするたびに、サービスのパスワードを常に変更することができます。

100% 安全なシステムが必要な場合、または機密データが共有データであり、ユーザー固有ではない場合 (MMORPG など)、Eric が指摘するように、唯一の解決策は、データをクライアントではなくサーバーに置くことです。機械。

于 2013-06-12T17:50:51.263 に答える