3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Unity】JsonUtilityで複数のファイルに、簡易的な暗号化をしたデータを保存する

Last updated at Posted at 2023-08-18

■はじめに

個人でゲームをリリースしようと考えているので、ファイルの保存方法について真面目に考えることにしました。
従来ではそのままJsonUtilityで中身丸見えの状態で保存してましたが、不正されてしまうので暗号化することにしました。

(が、タイトルにある通り、簡易的な暗号なのでセキュリティは結構弱めっぽいので、後々記事を更新したいです。)

●当記事のコードのUnityPackageのダウンロード↓

ここから該当コードをダウンロードできます。

■実行結果

こんな感じです。(某クリッカーゲームのオマージュです)
SaveData.gif

暗号化もできてます
image.png

■解説

こちらの動画を元に作成しました。分かりやすいです。↓

●設計

こんな感じです。
image.png

GameDataBaseと、DataManagerからそれぞれ派生させることで、設定データの保存、ゲーム内容の保存…などと細分化できます。

●暗号化

参考の動画の通り、XOR暗号というのを利用しています。
手軽に実装できますが、強度はあまりだそうです。

今回は、Jsonで保存されるデータの文字列とパスワード的な文字列のXORで暗号にしていきます

image.png
(抜粋:上記リンクの動画 24:00~)

XORの性質として、(A ^ B) ^ B = Aというのがあるそうです。

A: 0011, B: 0101 とすると、A ^ B = 0110 になります。
そこにBをXORさせると、 0110 ^ 0101 = 0011と、Aになります。

これで、Bの部分に当たるパスワードさえあれば、A ^ BからAにしたり、AからA ^ Bを作成することができます。
これのおかげで、実際にプログラムに落とし込んでも、メソッド1つで暗号化・復号化ができるってのがありがたいですね。

ですが、これをめちゃくちゃ高速で一つ一つ入力されたら、そのうちバレます。
なので、他の暗号使った方がよさそうです。(良いのが見つかり次第、当記事も更新します。)

■コード

リポジトリです↓
(newっていうフォルダのやつが該当のコードとか入ってるやつです)

また、基本的に上記の参考動画の方が分かりやすいと思うので、コードの詳細解説はしません。

ですが、個人的に一部改良しています。

  • DataManagerの細分化:複数のファイルに保存した方が管理しやすいため。
  • FileDataHandlerstaticにしてる:わざわざインスタンス化しなくてもいいかなって思ったため
  • DataManagerのシングルトンなくしてる:シングルトンにして、アクセスしやすくなって危険だと思ったため。
  • クライアントインターフェースを検索してListに格納するのをなくして、クライアント側からイベントを登録するようにしてる:Findメソッドが重く、あまり好ましくないため。

こんな感じです。

■さいごに

暗号化について色々調べてみましたが、他のどの暗号使えばいいか分からないです🙄
AESってのが一番良さそう?
余裕とやる気ができたら、記事を更新します。

●参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?