環境
- 書いた日 2016/08/27
- OS X El Capitan 10.11.6
- Unity 5.4.0f3
やりたいこと
- PlayerPrefsに保存されるデータを暗号化しておきたい。
やったことまとめ
暗号化して保存する EncryptedPlayerPrefs クラスを作った。
特別なアセット利用はなし。素のUnityでそのまま使えます。
ソースと使いかたは後半
やったこと詳細
PlayerPrefs暗号化できないかなーと思って調べたらいい記事発見。
おーいいじゃんと思って紹介されてる ZDatabase をポチった。
試してみてたらなんかおかしい。
SaveBool
したあとにLoadBool
しても必ずデフォルト値が帰ってくる。
PlayerPrefsにはちゃんとキーも保存されてる。
SaveString
と LoadString
は問題ないから ZDatabase がバグってると判断。
ZDatabaseのフォーラム見ても1年以上更新されてないし、あーこれ無駄買いしちゃったな・・・と。
結局自分で作ることにした。
AssetStoreって返品できないのかな??
ソースと使いかた
※使用は自己責任でお願いしますね〜。
必要クラス
下記ファイルをUnity上に放り込む
PASS
、SALT
は適当に変えてください。
使いかた
好きな場所でこんな感じに呼び出す
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); } }
出力されたログ
保存されてるPlayerPrefsの中身はこんな感じ。
備考
本当はパスワード固定じゃなくて、keyを付与して使うとかすべきだと思う。
このソースだとSaveBool("foo", true); と SaveBool("bar", true); は同じ値が保存されるし。
まぁスマホ利用であんま負荷かけたくないのと、入れるデータも大したことないのでこれで行くことにした。
参考
パスワードで文字列を暗号化する: .NET Tips: C#, VB.NET
Android Security 安全なアプリケーションを作成するために
- 作者: タオソフトウェア株式会社
- 出版社/メーカー: インプレス
- 発売日: 2012/11/28
- メディア: Kindle版
- この商品を含むブログを見る