29 using System.Security.Cryptography;
51 public string Encode (
string input,
string password )
53 #if !UNITY_WSA || !UNITY_WINRT
56 var plainTextBytes = Encoding.UTF8.GetBytes ( input );
58 var keyBytes = passPhrase.GetBytes (
Keysize / 8 );
59 using ( var symmetricKey =
new RijndaelManaged () )
61 symmetricKey.BlockSize = 256;
62 symmetricKey.Mode = CipherMode.CBC;
63 symmetricKey.Padding = PaddingMode.PKCS7;
64 using ( var encryptor = symmetricKey.CreateEncryptor ( keyBytes, ivStringBytes ) )
66 using ( var memoryStream =
new MemoryStream () )
68 using ( var cryptoStream =
new CryptoStream ( memoryStream, encryptor, CryptoStreamMode.Write ) )
70 cryptoStream.Write ( plainTextBytes, 0, plainTextBytes.Length );
71 cryptoStream.FlushFinalBlock ();
72 var cipherTextBytes = saltStringBytes;
73 cipherTextBytes = cipherTextBytes.Concat ( ivStringBytes ).ToArray ();
74 cipherTextBytes = cipherTextBytes.Concat ( memoryStream.ToArray () ).ToArray ();
75 memoryStream.Close ();
76 cryptoStream.Close ();
77 return Convert.ToBase64String ( cipherTextBytes );
83 return Convert.ToBase64String ( Encoding.UTF8.GetBytes ( input ) );
92 public string Decode (
string input,
string password )
94 #if !UNITY_WSA || !UNITY_WINRT
95 var cipherTextBytesWithSaltAndIv = Convert.FromBase64String ( input );
96 var saltStringBytes = cipherTextBytesWithSaltAndIv.Take (
Keysize / 8 ).ToArray ();
97 var ivStringBytes = cipherTextBytesWithSaltAndIv.Skip (
Keysize / 8 ).Take (
Keysize / 8 ).ToArray ();
98 var cipherTextBytes = cipherTextBytesWithSaltAndIv.Skip ( (
Keysize / 8 ) * 2 ).Take ( cipherTextBytesWithSaltAndIv.Length - ( (
Keysize / 8 ) * 2 ) ).ToArray ();
100 var keyBytes = passPhrase.GetBytes (
Keysize / 8 );
101 using ( var symmetricKey =
new RijndaelManaged () )
103 symmetricKey.BlockSize = 256;
104 symmetricKey.Mode = CipherMode.CBC;
105 symmetricKey.Padding = PaddingMode.PKCS7;
106 using ( var decryptor = symmetricKey.CreateDecryptor ( keyBytes, ivStringBytes ) )
108 using ( var memoryStream =
new MemoryStream ( cipherTextBytes ) )
110 using ( var cryptoStream =
new CryptoStream ( memoryStream, decryptor, CryptoStreamMode.Read ) )
112 var plainTextBytes =
new byte[cipherTextBytes.Length];
113 var decryptedByteCount = cryptoStream.Read ( plainTextBytes, 0, plainTextBytes.Length );
114 memoryStream.Close ();
115 cryptoStream.Close ();
116 return Encoding.UTF8.GetString ( plainTextBytes, 0, decryptedByteCount );
122 return Encoding.UTF8.GetString ( Convert.FromBase64String ( input ) );
126 #if !UNITY_WSA || !UNITY_WINRT
129 var randomBytes =
new byte[32];
130 var rngCsp =
new RNGCryptoServiceProvider ();
131 rngCsp.GetBytes ( randomBytes );
Simple Encoder used by the SaveData class.
string Decode(string input, string password)
Decode the specified input with password.
static byte[] Generate256BitsOfRandomEntropy()
string Encode(string input, string password)
Encode the specified input with password.
const int DerivationIterations