Help us understand the problem. What is going on with this article?

簡易なセーブデータの暗号化 (PlayerPrefs)

前提

  • unity 2018.4.1f1
  • System.Security.Cryptography BlockSize 128bit, KeySize 256bit, Mode CBC, Padding PKCS7

できること

  • 標準のPlayerPrefsを置き換える形で、セーブデータの暗号化ができます。
  • PlayerPrefsを継承するので、クラス名を付け替えるだけで置き換えが完了します。
  • 拡張されたGetObject ()SetObject ()が使えます。

アセットの入手 (GitHub)

ダウンロード ⇒ CryptoPlayerPrefs.unitypackage
ソースはこちらです。

導入

  • 最小限必要なアセットは、Crypto.csCryptoPlayerPrefs.csです。
  • Sample.csは使用例です。シーンSampleSceneで挙動を確認できます。

簡単な使い方

  • PlayerPrefsの代わりにCryptoPlayerPrefsを使用します。
    • クラス名が異なる以外は同じ使い方です。
  • これは、Sample.csで冒頭の#define INIT_CRYPTOをコメントアウトした状態です。
  • 暗号鍵は自動生成され、簡易なスクランブルを施されてPlayerPrefsに保存されます。
  • CryptoPlayerPrefs.scrambleメソッドを独自のアルゴリズムに変更することで、より安全に管理できます。
  • GetObject ()SetObject ()を使う対象には、[Serializable]アトリビュートの指定が必要です。
    • 具体的には、"Sample.cs"を参照してください。
    • このセーブデータは、.NETのバージョンに依存しており、異なるバージョン間では互換性が保証されません。

暗号鍵を自分で管理する

  • 独自の暗号鍵を設定してから、CryptoPlayerPrefsを使用することも可能です。
    • Crypto.Init ("[16文字]", "[32文字]");
    • または、Crypto.Init (byte [16], byte [32]);
  • Sample.csの使い方だと、暗号鍵はコード中に平文で格納されていますが、画像データの一部を使用するなど、よりトリッキーな方法も考えられます。
  • 鍵を自分で管理する場合は、CryptoPlayerPrefs.cs冒頭の#define AUTO_INITをコメントアウトすることで、自動初期化のコードを削減できます。

開発途中はセーブデータの内容を見たい

  • CryptoPlayerPrefs.cs冒頭の#define CRYPTOをコメントアウトすると、暗号化を行いません。
    • 素のPlayerPrefsの挙動になります。

【参考】#define 触るの面倒なんだけど…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away