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,boolとfloatも使えます。
