Шифрование строк - не получается реализовать расшифровку - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, продолжаю разбираться в .NET и вновь прошу помощи у Гуру. Сейчас пробую вкурить шифрование, а именно AES через класс AesManaged: шифрует он все превосходно, а вот обратно как-то не идет, в чем Ваш покорный дурак? P.S. Заранее спасибо, листинг прилагаю.

Класс для шифрования и дешифрования строки с парой тематических методов, двумя конструкторами и полями для хранения алгоритма шифрования, ключика и соли:

using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;
 
namespace AES_Symmetric_Encryption
{
    /// <summary>
    /// Класс, реализующий шифрование
    /// </summary>
    public class TextEncryptor
    {
        /// <summary>
        /// приватные поля класса
        /// </summary>
        private AesManaged algorithm = new AesManaged();
        private byte[] rgbKey;
        private byte[] rgbSalt;
        private MemoryStream buffer = new MemoryStream();
 
        /// <summary>
        /// Конструктор по умолчанию
        /// </summary>
        public TextEncryptor()
        {
            string password = "Pa$$w0rd";
            string salt = "s@lT";
            var rgb = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));
            rgbKey = rgb.GetBytes(algorithm.KeySize / 8);
            rgbSalt = rgb.GetBytes(algorithm.BlockSize / 8);
        }
 
        /// <summary>
        /// Конструктр с параметрами
        /// </summary>
        /// <param name="password"></param>
        /// <param name="salt"></param>
        public TextEncryptor(string password, string salt)
        {
            var rgb = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));
            rgbKey = rgb.GetBytes(algorithm.KeySize / 8);
            rgbSalt = rgb.GetBytes(algorithm.BlockSize / 8);
        }
 
        /// <summary>
        /// Метод шифрования строки
        /// </summary>
        /// <param name="decryptedText"></param>
        /// <returns></returns>
        public string TextEncryption(string decryptedText)
        {
            var bytesToTransform = Encoding.Unicode.GetBytes(decryptedText);
            var algorithmEncryptor = algorithm.CreateEncryptor(rgbKey, rgbSalt);
            var cryptoStream = new CryptoStream(buffer, algorithmEncryptor, CryptoStreamMode.Write);
            cryptoStream.Write(bytesToTransform, 0, bytesToTransform.Length);
            cryptoStream.FlushFinalBlock();
 
            buffer.Position = 0;
            StreamReader sr = new StreamReader(buffer);
            string encryptedString = sr.ReadToEnd();
            cryptoStream.Close();
            buffer.Close();
            return encryptedString;
        }
 
        /// <summary>
        /// Метод дешифрвания строки
        /// </summary>
        /// <param name="encryptedText"></param>
        /// <returns></returns>
        public string TextDecryption(string encryptedText)
        {
            var bytesToTransform = Encoding.Unicode.GetBytes(encryptedText);
            var algorithmDecryptor = algorithm.CreateDecryptor(rgbKey, rgbSalt);
            var cryptoStream = new CryptoStream(buffer, algorithmDecryptor, CryptoStreamMode.Write);
            cryptoStream.Write(bytesToTransform, 0, bytesToTransform.Length);
            cryptoStream.FlushFinalBlock();
 
            buffer.Position = 0;
            StreamReader sr = new StreamReader(buffer);
            string decryptedString = sr.ReadToEnd();
            cryptoStream.Close();
            buffer.Close();
            return decryptedString;
        }
    }
}

Вызывающий код:

using System;
 
namespace AES_Symmetric_Encryption
{
    class Program
    {
        static void Main(string[] args)
        {
            string originalString = "Top Secret Information!";
 
            TextEncryptor textEncryptor = new TextEncryptor();
            string encryptedText = textEncryptor.TextEncryption(originalString);
            string decryptedText = textEncryptor.TextDecryption(encryptedText);
 
            Console.WriteLine("Original string {0}\nEncrypted string: {1}\nDecrypted string: {2}", 
                originalString ,encryptedText, decryptedText);
        }
    }
}

Решение задачи: «Шифрование строк - не получается реализовать расшифровку»

textual
Листинг программы
using System;
using System.Text;
 
namespace AES_Symmetric_Encryption
{
    class Program
    {
        static void Main(string[] args)
        {
            string originalString = "Top Secret Information!";
            byte[] originalBytes = Encoding.Unicode.GetBytes(originalString);
 
            TextEncryptor textEncryptor = new TextEncryptor();
            byte[] encryptedBytes = textEncryptor.TextEncryption(originalBytes);
            byte[] decryptedBytes = textEncryptor.TextDecryption(encryptedBytes);
 
            String encryptedString = Encoding.Unicode.GetString(encryptedBytes);
            String decryptedString = Encoding.Unicode.GetString(decryptedBytes);
            Console.WriteLine("Original string {0}\nEncrypted string: {1}\nDecrypted string: {2}", 
                originalString ,encryptedString, decryptedString);
 
            Console.ReadLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы