Unityでセーブデータを復号化する方法です。
今回はAESでセーブデータを復号化します。
セーブデータをパソコンのローカルから読み込みます。
1.ReadSaveDataClassというスクリプトを作ります。
2.中身はこちらです。
using UnityEngine;
using System.Collections;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class ReadSaveDataClass : MonoBehaviour
{
void OnEnable()
{
StartCoroutine(ReadDataCoroutine());
}
private IEnumerator ReadDataCoroutine()
{
string filepath = Application.persistentDataPath + "/save";
if (File.Exists(filepath))
{
//ファイル読み込み
byte[] bytes = File.ReadAllBytes(filepath);
//復号化
byte[] bytesDecrypt = AesDecrypt(bytes);
// byte配列を文字列に変換
string decryptString = Encoding.UTF8.GetString(bytesDecryp);
yield return ReadDataToDataCoroutiine(decryptString);
}
yield return new WaitForSecondsRealtime(0.5f);
this.enabled = false;
}
private IEnumerator ReadDataToDataCoroutiine(string decryptString)
{
SaveSaveDataClass saveSaveDataClass = JsonUtility.FromJson<SaveSaveDataClass>(decryptString);
SaveDataClass.number = saveSaveDataClass.numForSave;
SaveDataClass.text = saveSaveDataClass.textForSave;
SaveDataClass.isbool = saveSaveDataClass.isboolForSave;
yield return null;
}
public byte[] AesDecrypt(byte[] byteText)
{
AesManaged aes = GetAesManager();
byte[] decryptText = aes.CreateDecryptor().TransformFinalBlock(byteText, 0, byteText.Length);
return decryptText;
}
private AesManaged GetAesManager()
{
AesManaged aes = new AesManaged();
aes.KeySize = 128;
aes.BlockSize = 128;
aes.Mode = CipherMode.CBC;
aes.IV = Encoding.UTF8.GetBytes("0123456789abcdef");//半角英数字16桁(WriteSaveDataClassと同じもの)
aes.Key = Encoding.UTF8.GetBytes("0123456789abcdef");//半角英数字16桁(WriteSaveDataClassと同じもの)
aes.Padding = PaddingMode.PKCS7;
return aes;
}
}
3.Hiarachyにゲームオブジェクトを作成して、そのオブジェクトにReadSaveDataClassをアタッチする。
4.ReadSaveDataClassのactiveのチェックボックスをOFFにしておく。
5.エディタを再生して、ReadSaveDataClassのactiveのチェックボックスをONにする。
6.パソコンのローカルのセーブデータを読み込み、Unityのデータに読み込むことができます。
Unity セーブ(復号化)です。
以前の記事のUnity セーブ(暗号化)で作成したSaveDataClassとSaveSaveDataClassとWriteSaveDataClassを引き続き使用しています。
5の”エディタを再生して、ReadSaveDataClassのactiveのチェックボックスをONにする。”の前に、セーブデータを作成しておく必要があります。
これでUnity セーブ(復号化)を終わります。
セーブデータの書き込み、読み込みをできるようになって、制作の幅を広げていきましょう。
DLsiteで3Dアクションゲーム「Where the sky is」をリリースしています。
よかったら、こちらもよろしくお願いします。
