Шифрование данных (AES) | ФОРУМ СОЦИАЛЬНОЙ ИНЖЕНЕРИИ ⭐️MeHack⭐️ - Читы, базы, раздачи аккаунтов, сливы скриптов, способы заработка

Шифрование данных (AES)

Тема в разделе "Вирусология", создана пользователем Mr1Frick, 12.11.17.Просмотров: 472

  1. Mr1Frick Гость

    Mr1Frick

    розыгрышей
    В наше время сейчас мало кто изучает криптографию, хотя это не менее важная часть программирования, ибо криптография это сама основа нашей безопасности.
    Самой сутью криптографии является обработка данных делающая их невозможными для чтения посторонним пользователям.
    Сегодня мы с вами рассмотрим мой пример шифрования данных на языке C#
    Используемые библиотеки:

    Код:
    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    Сам код шифрования данных:
    Код:
    /// <summary>
           /// Encrypts a string
           /// </summary>
           /// <param name="plainText">Text to be encrypted</param>
           /// <param name="password">Password to encrypt with</param>
           /// <param name="salt">Salt to encrypt with</param>
           /// <param name="hashAlgorithm">Can be either SHA1 or MD5</param>
           /// <param name="passwordIterations">Number of iterations to do</param>
           /// <param name="initialVector">Needs to be 16 ASCII characters long</param>
           /// <param name="keySize">Can be 128, 192, or 256</param>
           /// <returns>An encrypted string</returns>
           public string Encrypt(string plainText, string password, string salt = "Kosher", string hashAlgorithm = "SHA1", int passwordIterations = 2, string initialVector = "OFRna73m*aze01xY", int keySize = 256)
           {
               if (string.IsNullOrEmpty(plainText))
                   return "";
    
               byte[] initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
               byte[] saltValueBytes = Encoding.ASCII.GetBytes(salt);
               byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
    
               PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, passwordIterations);
               byte[] keyBytes = derivedPassword.GetBytes(keySize / 8);
               RijndaelManaged symmetricKey = new RijndaelManaged();
               symmetricKey.Mode = CipherMode.CBC;
    
               byte[] cipherTextBytes = null;
    
               using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes))
               {
                   using (MemoryStream memStream = new MemoryStream())
                   {
                       using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
                       {
                           cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
                           cryptoStream.FlushFinalBlock();
                           cipherTextBytes = memStream.ToArray();
                           memStream.Close();
                           cryptoStream.Close();
                       }
                   }
               }
    
               symmetricKey.Clear();
               return Convert.ToBase64String(cipherTextBytes);
           }
    Вот код расшифровки:
    Код:
    /// <summary>
           /// Decrypts a string
           /// </summary>
           /// <param name="cipherText">Text to be decrypted</param>
           /// <param name="password">Password to decrypt with</param>
           /// <param name="salt">Salt to decrypt with</param>
           /// <param name="hashAlgorithm">Can be either SHA1 or MD5</param>
           /// <param name="passwordIterations">Number of iterations to do</param>
           /// <param name="initialVector">Needs to be 16 ASCII characters long</param>
           /// <param name="keySize">Can be 128, 192, or 256</param>
           /// <returns>A decrypted string</returns>
           public string Decrypt(string cipherText, string password, string salt = "Kosher", string hashAlgorithm = "SHA1", int passwordIterations = 2, string initialVector = "OFRna73m*aze01xY", int keySize = 256)
           {
               if (string.IsNullOrEmpty(cipherText))
                   return "";
    
               byte[] initialVectorBytes = Encoding.ASCII.GetBytes(initialVector);
               byte[] saltValueBytes = Encoding.ASCII.GetBytes(salt);
               byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
    
               PasswordDeriveBytes derivedPassword = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, passwordIterations);
               byte[] keyBytes = derivedPassword.GetBytes(keySize / 8);
    
               RijndaelManaged symmetricKey = new RijndaelManaged();
               symmetricKey.Mode = CipherMode.CBC;
    
               byte[] plainTextBytes = new byte[cipherTextBytes.Length];
               int byteCount = 0;
    
               using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes))
               {
                   using (MemoryStream memStream = new MemoryStream(cipherTextBytes))
                   {
                       using (CryptoStream cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
                       {
                           byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
                           memStream.Close();
                           cryptoStream.Close();
                       }
                   }
               }
    
               symmetricKey.Clear();
               return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);
           }
    Я думаю мне не стоит расписывать каждую строку, так как код и так понятнее просто некуда.