using System; using System.IO; using System.Security.Cryptography; using UnityEngine; public static class SecurePlayerPrefs { private static readonly byte[] salt = new byte[] { 0x13, 0x24, 0x37, 0x48, 0x59, 0x6A, 0x7B, 0x8C }; private static readonly byte[] key = new byte[] { 0x6D, 0x5B, 0x35, 0x81, 0x49, 0x93, 0xD8, 0x10, 0x52, 0x7E, 0x2B, 0x19, 0x4C, 0xFA, 0x67, 0x8A }; public static void SetString(string key, string value) { byte[] encrypted = EncryptStringToBytes(value); string encoded = Convert.ToBase64String(encrypted); PlayerPrefs.SetString(key, encoded); } public static string GetString(string key, string defaultValue = "") { string encoded = PlayerPrefs.GetString(key, defaultValue); byte[] encrypted = Convert.FromBase64String(encoded); string value = DecryptStringFromBytes(encrypted); return value; } private static byte[] EncryptStringToBytes(string plainText) { byte[] encrypted; using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = salt; ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } encrypted = msEncrypt.ToArray(); } } } return encrypted; } private static string DecryptStringFromBytes(byte[] cipherText) { string plaintext = null; using (Aes aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = salt; ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV); using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { plaintext = srDecrypt.ReadToEnd(); } } } } return plaintext; } }