Доброго времени суток. Начал реализовывать защиту игры, сам впервые этим занимаюсь, так что нашел статью на хабре http://habrahabr.ru/post/249681/. 
 Но автор не привел примера использования его скриптов, пришлось немного поломать голову, но я почти со всем разобрался, кроме одного. 
 Вот скрипт: 
 Код
using System; 
 using System.IO; 
 using System.Security.Cryptography; 
 using System.Text; 
 namespace Assets.Scripts.Common 
 { 
     /// <summary> 
     /// AES (Advanced Encryption Standard) implementation with 128-bit key (default) 
     /// - 128-bit AES is approved  by NIST, but not the 256-bit AES 
     /// - 256-bit AES is slower than the 128-bit AES (by about 40%) 
     /// - Use it for secure data protection 
     /// - Do NOT use it for data protection in RAM (in most common scenarios) 
     /// </summary> 
     public static class AES 
     { 
         public static int KeyLength = 128; 
         private const string SaltKey = "ShMG8hLyZ7k~Ge5@"; 
         private const string VIKey = "~6YUi0Sv5@|{aOZO"; // TODO: Generate random VI each encryption and store it with encrypted value 
         public static string Encrypt(byte[] value, string password) 
         { 
             var keyBytes = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(SaltKey)).GetBytes(KeyLength / 8); 
             var symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros }; 
             var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.UTF8.GetBytes(VIKey)); 
             using (var memoryStream = new MemoryStream()) 
             { 
                 using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 
                 { 
                     cryptoStream.Write(value, 0, value.Length); 
                     cryptoStream.FlushFinalBlock(); 
                     cryptoStream.Close(); 
                     memoryStream.Close(); 
                     return Convert.ToBase64String(memoryStream.ToArray()); 
                 } 
             } 
         } 
         public static string Encrypt(string value, string password) 
         { 
             return Encrypt(Encoding.UTF8.GetBytes(value), password); 
         } 
         public static string Decrypt(string value, string password) 
         { 
             var cipherTextBytes = Convert.FromBase64String(value); 
             var keyBytes = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(SaltKey)).GetBytes(KeyLength / 8); 
             var symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.None }; 
             var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.UTF8.GetBytes(VIKey)); 
             using (var memoryStream = new MemoryStream(cipherTextBytes)) 
             { 
                 using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read)) 
                 { 
                     var plainTextBytes = new byte[cipherTextBytes.Length]; 
                     var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); 
                     memoryStream.Close(); 
                     cryptoStream.Close(); 
                     return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray()); 
                 } 
             } 
         } 
     } 
 }
 Метод Encrypt требует два параметра, первый понятно для чего, но не совсем понятно для чего второй. Как я понял это пароль, можете мне разжевать его использование, пожалуйста?