データをゲームからサーバーへ「AES暗号化」して送信する [Unity]
ゲーム側の「C#」でAES128ビット(CBCモード)によるデータの暗号化を行い、サーバ側では「PHP」で復号化の処理を行います。
「共有キー」(Key)、「初期化ベクトル」(IV)の2つのキーがありますが、共有キーは非公開にする必要があります。※初期化ベクトルは公開してもOK。
次の例だと「逆アセンブル」されたら共有キーが判明する可能性があるので、企業などが使用する際は、逆アセンブル対策を行ってください。
ゲーム側(C#)
using UnityEngine.Networking; // AES128ビット(CBCモード)による暗号化 // ※このメソッドでは最大16byteの文字列(src)に対応 string AES128_Encode(string src, string key, string iv) { // 文字列をバイト型配列へ byte[] input = System.Text.Encoding.UTF8.GetBytes(src); // AES暗号化 System.Security.Cryptography.AesManaged AES = new System.Security.Cryptography.AesManaged(); AES.KeySize = 128; // 鍵の長さ AES.BlockSize = 128; // ブロックサイズ(srcは16byteまで) AES.Mode = System.Security.Cryptography.CipherMode.CBC; // CBCモード AES.IV = System.Text.Encoding.UTF8.GetBytes(iv); // 初期化ベクトル(公開) AES.Key = System.Text.Encoding.UTF8.GetBytes(key); // 共有キー(非公開) AES.Padding = System.Security.Cryptography.PaddingMode.PKCS7; byte[] output = AES.CreateEncryptor().TransformFinalBlock(input, 0, input.Length); // BASE64 return System.Convert.ToBase64String(output); } IEnumerator SendServer() { // --------------- // KEY/IV // --------------- // KEY(非公開) string key = "abcdefghijklmnop"; // IV(公開) // ※16桁のランダムな英数字を生成 string iv = System.Guid.NewGuid().ToString("N").Substring(0, 16); // --------------- // URLの実行 // --------------- // URL string url = "https://www.example.com/reg.php"; url += "?name1=" + System.Web.HttpUtility.UrlEncode(AES128_Encode("テスト", key, iv)); url += "&iv=" + iv; UnityWebRequest www = UnityWebRequest.Get(url); yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { // エラー Debug.Log(www.error); } else { // GETの結果を表示する Debug.Log(www.downloadHandler.text); } } public void run() { StartCoroutine(SendServer()); }
サーバー側(PHP)
// 暗号の復号化 function decrypt($base64) { $key = "abcdefghijklmnop"; // 共有キー(非公開) $iv = $_GET['iv']; // 初期化ベクトル(公開) $method = 'AES-128-CBC'; return openssl_decrypt($base64, $method, $key, 0, $iv); } $name1 = decrypt($_GET['name1']); echo $name1;
※$keyの定義はpublic_htmlフォルダより上の階層のファイルで行う。
以上となります。
スポンサーリンク
関連記事
公開日:2019年05月06日
記事NO:02757