FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】文字列の暗号化・復号化を簡単に行う

【Unity】【C#】文字列の暗号化・復号化を簡単に行う  


 今回は手軽にデータの暗号化・復号化が行える「Unity Cipher」というオープンソースライブラリを紹介しよう。

 実際にはコードを見てみると、特に Unity 以外でも使えそうだが、デモ(Examples)が Unity で作られているからだろうか?とても簡単で強固なセキュリティが確保できるので、パスワードや何らかのアカウントデータなどを扱うアプリなら、導入を検討した方が良いだろう。

 詳しい内容などはライブラリ作者直々の記事があるので、そちらを参考にして欲しい。ここではどちらかと言うとオープンソースライブラリなど、余りサードパーティを利用したことのない人のためにも、細かい導入手順を書いておく。

Unity(C#) で「正しい」暗号化処理をするライブラリを作成しました

(※) Unity 2019.2.18f1 / Windows10(x64) で確認

※掲載時点 1.2.0 では 2019.2.17f1 で作られているようだが、コードにバージョン依存性はあまり無いと思うので、少し古い Unity バージョンでも問題なく使えると思う(少なくとも Unity2017 では使えた)。


■ライブラリのインポート

 まずは github でライブラリをダウンロードしよう。「Clone or download」から zip をダウンロードできるので、落としたら解凍して、「UnityCipher.unitypackage」を Unity にインポートする(プロジェクトビューにドラッグ&ドロップすると楽)。



Unity CipherMIT License



 インポートできたら、「Assets/UnityCipher/Plugins/UnityCipher/」フォルダにある cs ファイルがライブラリ本体となる。
 デモ(Assets/UnityCipher/Examples/ 以下)が必要無いなら、これらファイルだけ導入しても構わない。



 ちなみに「Plugins」フォルダに入れておくことは、スクリプトのコンパイル順に関係する事なので、汎用的なライブラリは Plugins 以下に配置されていることが多い → UniRxAssetStore版)等

特殊フォルダーとスクリプトのコンパイル順 (Unity Manual)

 簡単な使い方はデモを見るのが早いかも知れない。「Assets/UnityCipher/Examples/ 」に「Example」シーンがあるので、起動してみると良いだろう。



 オススメは「Rijndael」だ。サンプルコード上では「Examples/Scripts」フォルダ以下の「RijndaelContent.cs」を開けば、だいたい使い方がわかると思う。例えば、暗号化・復号化の部分を抜き出せば次のようになる。

●UnityCipher での暗号化・復号化
using UnityCipher;

//暗号化
string encrypted = RijndaelEncryption.Encrypt(planeText, passwordText);

//復号化
string plane = RijndaelEncryption.Decrypt(encryptedText, passwordText);

(例えば、planeText = "hogehoge", passwordText = "password" とすると)
encrypted = I8WWDJbFzGCN4OiauU7H1w2PSOTCFDZUIMXD000pA3bq4T4g06lNvzxSlW8qQEMF4agkUfrnFfL4eXRd9AtaSlI2TZpuwZF7dH1+sYwaNBvOty2ImJJuaqVWEdWbjfB6

(次に、暗号化[エンコード]された文字列(encrypted)を復号化すると[→ passwordText は同じものを使う])
plane = "hogehoge"

 このライブラリの優れた所は、デモでもう一度同じ文字列を暗号化して貰えるとわかると思うが、毎回違う文字列が生成される点だ(ライブラリ作者の記事に詳しく書いてある)。つまり文字列の並びから中身は想定はされずらいので、セキュリティ的にも安全性が高くなる(世の中には本当に凄い人もいるもので、実際に学会などで新しい暗号化方式を、何度かパターンを見ただけでやぶってしまう人もいるという…)。

 また注意点としては、当たり前だがパスワードは難しいものにしておいてね…と(笑)("password" とか "admin" とかはダメですよ(笑))。

 Unity においては例えば PlayerPrefs に使っても良いかも知れない。ただし、文字列が長くなるので、Android/iOS には大量にやらない方が良いかも(Android は ~.xml, iOS は ~.plist に書き出されるため)。もしキーと値を両方暗号化したいなら、キーには「ハッシュ値」を使うのもアリだろう。

【C#】MD5, SHA1, SHA256, SHA384, SHA512 等のハッシュ値を生成する
【Unity】PlayerPrefs, persistentDataPath, temporaryCachePath の保存場所(パス)一覧表

 また、github の Usage にも書いてあるが、byte[] も使えるので、バイナリデータを暗号化するにも良いだろう。使い方は同様なので難しくはないと思う。





(関連記事)
【C#】MD5, SHA1, SHA256, SHA384, SHA512 等のハッシュ値を生成する
【C#】GUID の生成と書式
【Unity】PlayerPrefs, persistentDataPath, temporaryCachePath の保存場所(パス)一覧表


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityプラグイン  Unityオープンソースライブラリ  C# 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/345-e3a084f2
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR