データをゲームからサーバーへ「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
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









