Unity セーブ(暗号化)

Unityでセーブデータを暗号化する方法です。

今回はAESでセーブデータを暗号化します。

セーブデータをパソコンのローカルに保存します。

1.SaveDataClassというスクリプトを作ります。

2.コードの中身はこちらです。
using UnityEngine;

public class SaveDataClass : MonoBehaviour
{
public static int number;
public static string text;
public static bool isbool;
}

3.次にSaveSaveDataClassというスクリプトを作ります。

4.コードの中身はこちらです。

[System.Serializable]
public class SaveSaveDataClass
{
public int numberForSave;
public string textForSave;
public bool isboolForSave;
}

5.それからWriteSaveDataClassというスクリプトを作ります。

6.コードの中身はこちらです。

using System.Collections;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;

public class WriteSaveDataClass : MonoBehaviour
{

void OnEnable()
{
StartCoroutine(SaveDataCoroutine());
}


private IEnumerator SaveDataCoroutine()
{

//セーブする場所を指定
string filepath = Application.persistentDataPath + "/save";

//パソコン内にセーブデータがあれば削除する
if (File.Exists(filepath))
{
File.Delete(filepath);

yield return new WaitUntil(() => !File.Exists(filepath));
yield return null;
}


string json = JsonUtility.ToJson(SaveDataToData(), true);
// byte配列に変換
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(json);

// AES暗号化
byte[] bytesEncrypted = AesEncrypt(bytes);

// ファイル書き込み
File.WriteAllBytes(filepath, bytesEncrypted);

yield return new WaitForSecondsRealtime(0.5f);
this.enabled = false;
}


private SaveSaveDataClass SaveDataToData()
{
SaveSaveDataClass saveSaveDataClass = new SaveSaveDataClass();

saveSaveDataClass.numForSave = SaveDataClass.number;
saveSaveDataClass.textForSave = SaveDataClass.text;
saveSaveDataClass.isboolForSave = SaveDataClass.isbool;
return saveSaveDataClass;
}


public byte[] AesEncrypt(byte[] byteText)
{
AesManaged aes = GetAesManager();
byte[] encryptText = aes.CreateEncryptor().TransformFinalBlock(byteText, 0, byteText.Length);
return encryptText;
}

private AesManaged GetAesManager()
{
AesManaged aes = new AesManaged();
aes.KeySize = 128;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.IV = Encoding.UTF8.GetBytes("0123456789abcdef");//半角英数字16桁
aes.Key = Encoding.UTF8.GetBytes("0123456789abcdef");//半角英数字16桁
aes.Padding = PaddingMode.PKCS7;
return aes;
}

}

7.Hiarachyにゲームオブジェクトを作成して、そのオブジェクトにWriteSaveDataClassをアタッチする。

8.WriteSaveDataClassのactiveのチェックボックスをOFFにしておく。

9.エディタを再生して、WriteSaveDataClassのactiveのチェックボックスをONにする。

10.C:/Users/user/AppData/LocalLow/CompanyName/ProductNameを確認。(userは自分のパソコンのアカウントの名前です。)

11.saveというファイルを右クリックでメモ帳で開けて見てみると、暗号化されているのがわかります。

これで、Unity セーブ(暗号化)を終わります。

次回は複合化をしていく予定です。

ありがとうございました。

※セーブデータは、int,string,boolfloatも使えます。

Twitterでフォローしよう

おすすめの記事