読者です 読者をやめる 読者になる 読者になる

naichi's lab

3日後の自分(他人)への書き置き

【Unity】PlayerPrefsの暗号化

Unity

f:id:naichilab:20160827233720p:plain

環境

  • 書いた日 2016/08/27
  • OS X El Capitan 10.11.6
  • Unity 5.4.0f3

やりたいこと

  • PlayerPrefsに保存されるデータを暗号化しておきたい。

やったことまとめ

暗号化して保存する EncryptedPlayerPrefs クラスを作った。

特別なアセット利用はなし。素のUnityでそのまま使えます。

ソースと使いかたは後半

やったこと詳細

PlayerPrefs暗号化できないかなーと思って調べたらいい記事発見。

kan-kikuchi.hatenablog.com

おーいいじゃんと思って紹介されてる ZDatabase をポチった。

試してみてたらなんかおかしい。

SaveBoolしたあとにLoadBoolしても必ずデフォルト値が帰ってくる。

PlayerPrefsにはちゃんとキーも保存されてる。

SaveStringLoadString は問題ないから ZDatabase がバグってると判断。

ZDatabaseのフォーラム見ても1年以上更新されてないし、あーこれ無駄買いしちゃったな・・・と。

結局自分で作ることにした。

AssetStoreって返品できないのかな??

ソースと使いかた

※使用は自己責任でお願いしますね〜。

必要クラス

下記ファイルをUnity上に放り込む

PASSSALT は適当に変えてください。

使いかた

好きな場所でこんな感じに呼び出す

using UnityEngine;

public class Sample : MonoBehaviour
{
    void Start()
    {
        EncryptedPlayerPrefs.SaveBool("hoge", true);
        bool hoge = EncryptedPlayerPrefs.LoadBool("hoge", false);
        Debug.Log(hoge);

        EncryptedPlayerPrefs.SaveString("foo", "this is string value.");
        string foo = EncryptedPlayerPrefs.LoadString("foo", "");
        Debug.Log(foo);

        EncryptedPlayerPrefs.SaveInt("bar", 123);
        int bar = EncryptedPlayerPrefs.LoadInt("bar", 0);
        Debug.Log(bar);
    }
}

出力されたログ

f:id:naichilab:20160827232642p:plain

保存されてるPlayerPrefsの中身はこんな感じ。

f:id:naichilab:20160827232527p:plain

これはAdvanced PlayerPrefs Windowで表示

備考

本当はパスワード固定じゃなくて、keyを付与して使うとかすべきだと思う。

このソースだとSaveBool("foo", true); と SaveBool("bar", true); は同じ値が保存されるし。

まぁスマホ利用であんま負荷かけたくないのと、入れるデータも大したことないのでこれで行くことにした。

参考

パスワードで文字列を暗号化する: .NET Tips: C#, VB.NET

tsubakit1.hateblo.jp

kan-kikuchi.hatenablog.com

Android Security 安全なアプリケーションを作成するために

Android Security 安全なアプリケーションを作成するために