Files
badeend-go/Assets/PlayerPrefsEditor/SimpleEncryption.cs

141 lines
4.6 KiB
C#

using System;
using System.Collections;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
namespace Sabresaurus.PlayerPrefsExtensions
{
public static class SimpleEncryption
{
// IMPORTANT: Make sure to change this key for each project you use this encryption in to help secure your
// encrypted values. This key must be exactly 32 characters long (256 bit).
private static string key = ":{j%6j?E:t#}G10mM%9hp5S=%}2,Y26C";
// Cache the encryption provider
private static RijndaelManaged provider = null;
private static void SetupProvider()
{
// Create a new encryption provider
provider = new RijndaelManaged();
// Get the bytes from the supplied string key and use it as the provider's key
provider.Key = Encoding.ASCII.GetBytes(key);
// Ensure that the same data is always encrypted the same way when used with the same key
provider.Mode = CipherMode.ECB;
}
/// <summary>
/// Encrypts the specified string using the key stored in SimpleEncryption and returns the encrypted result
/// </summary>
public static string EncryptString(string sourceString)
{
if(provider == null)
{
// Encryption provider hasn't been set up yet, so set it up
SetupProvider();
}
// Create an encryptor to encrypt the bytes
ICryptoTransform encryptor = provider.CreateEncryptor();
// Convert the source string into bytes to be encrypted
byte[] sourceBytes = Encoding.UTF8.GetBytes(sourceString);
// Encrypt the bytes using the encryptor we just created
byte[] outputBytes = encryptor.TransformFinalBlock(sourceBytes, 0, sourceBytes.Length);
// Convert the encrypted bytes into a Base 64 string, so we can safely represent them as a string and return
// that string
return Convert.ToBase64String(outputBytes);
}
/// <summary>
/// Decrypts the specified string from its specified encrypted value into the returned decrypted value using the
/// key stored in SimpleEncryption
/// </summary>
public static string DecryptString(string sourceString)
{
if(provider == null)
{
// Encryption provider hasn't been set up yet, so set it up
SetupProvider();
}
// Create a decryptor to decrypt the encrypted bytes
ICryptoTransform decryptor = provider.CreateDecryptor();
// Convert the base 64 string representing the encrypted bytes back into an array of encrypted bytes
byte[] sourceBytes = Convert.FromBase64String(sourceString);
// Use the decryptor we just created to decrypt those bytes
byte[] outputBytes = decryptor.TransformFinalBlock(sourceBytes, 0, sourceBytes.Length);
// Turn the decrypted bytes back into the decrypted string and return it
return Encoding.UTF8.GetString(outputBytes);
}
/// <summary>
/// Encrypts the specified float value and returns an encrypted string
/// </summary>
public static string EncryptFloat(float value)
{
// Convert the float into its 4 bytes
byte[] bytes = BitConverter.GetBytes(value);
// Represent those bytes as a base 64 string
string base64 = Convert.ToBase64String(bytes);
// Return the encrypted version of that base 64 string
return SimpleEncryption.EncryptString(base64);
}
/// <summary>
/// Encrypts the specified int value and returns an encrypted string
/// </summary>
public static string EncryptInt(int value)
{
// Convert the int value into its 4 bytes
byte[] bytes = BitConverter.GetBytes(value);
// Represent those bytes as a base 64 string
string base64 = Convert.ToBase64String(bytes);
// Return the encrypted version of that base 64 string
return SimpleEncryption.EncryptString(base64);
}
/// <summary>
/// Decrypts the encrypted string representing a float into the decrypted float
/// </summary>
public static float DecryptFloat(string sourceString)
{
// Decrypt the encrypted string
string decryptedString = SimpleEncryption.DecryptString(sourceString);
// Convert the decrypted Base 64 representation back into bytes
byte[] bytes = Convert.FromBase64String(decryptedString);
// Turn the bytes back into a float and return it
return BitConverter.ToSingle(bytes, 0);
}
/// <summary>
/// Decrypts the encrypted string representing an int into the decrypted int
/// </summary>
public static int DecryptInt(string sourceString)
{
// Decrypt the encrypted string
string decryptedString = SimpleEncryption.DecryptString(sourceString);
// Convert the decrypted Base 64 representation back into bytes
byte[] bytes = Convert.FromBase64String(decryptedString);
// Turn the bytes back into a int and return it
return BitConverter.ToInt32(bytes, 0);
}
}
}