Пятница, 29 Марта 2024, 10:38

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Зашита игры
Зашита игры
SmallNibblerДата: Воскресенье, 16 Августа 2015, 14:04 | Сообщение # 1
частый гость
Сейчас нет на сайте
Доброго времени суток. Начал реализовывать защиту игры, сам впервые этим занимаюсь, так что нашел статью на хабре 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 требует два параметра, первый понятно для чего, но не совсем понятно для чего второй. Как я понял это пароль, можете мне разжевать его использование, пожалуйста?
VinchensooДата: Воскресенье, 16 Августа 2015, 14:13 | Сообщение # 2
Злобный социопат с комплексом Бога
Сейчас нет на сайте
Это ключ шифрования судя по всему.

seamanДата: Воскресенье, 16 Августа 2015, 16:17 | Сообщение # 3
старожил
Сейчас нет на сайте
https://msdn.microsoft.com/ru-ru/library/zhe81fz4%28v=vs.90%29.aspx
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Зашита игры
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг