74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
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;
|
|
}
|
|
} |