Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2012, 00:07   #1
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
Вопрос Симметричная криптосистема средствами .NET Framework

Здравствуйте. Необходимо реализовать симметричную криптосистему средствами .NET Framework. Сделала по примеру с сайта MSDN http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.aes.ae s.aspx. Но выдается ошибка: Необработанное исключение типа "System.Security.Cryptography.Crypt ographicException" произошло в System.Core.dll. Дополнительные сведения: Входные данные не являются полным блоком. на строке
Код:
string temp = srDecrypt.ReadToEnd();
Подскажите, пожалуйста, по мере возможности, как решить эту проблему. Может кто-то уже с ней сталкивался. Или даже реализовывал симметричную криптосистему (алгоритм любой, не обязательно AES). Буду благодарна любой помощи. Прикладываю код:
Код:
public partial class myForm : Form
    {
        public byte[] cur_key = new byte[32];
        public byte[] cur_IV = new byte[16];

        public myForm()
        {
            InitializeComponent();
            lRes.Text = "";
        }

        // получить подмассив длины count массива a
        public byte[] GetKey(byte[] hash, int count)
        {
            byte[] a = new byte[count];
            for (int i = 0; i < count; i++)
                a[i] = hash[i];
            return a;
        }

        // шифрование
        private void bEncrypt_Click(object sender, EventArgs e)
        {
            string text = "";

            // считать из файла текст для шифрования
            if ((ofdOpenText.ShowDialog() == DialogResult.OK) && (ofdOpenText.FileName != ""))
            {
                StreamReader sr = new StreamReader(ofdOpenText.FileName, System.Text.Encoding.Default);
                text = sr.ReadToEnd();
                sr.Close();

                using (Aes myDES = Aes.Create())
                {
                    SHA512 shaM = new SHA512Managed();
                    byte[] password = Encoding.Default.GetBytes(rtbKeyFraze.Text);
                    cur_key = GetKey(shaM.ComputeHash(password), 32);

                    cur_IV = myDES.IV;

                    ICryptoTransform encryptor = myDES.CreateEncryptor(cur_key, cur_IV);
                    using (MemoryStream msEncrypt = new MemoryStream())
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                        {
                            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                            {
                                swEncrypt.Write(text);
                            }

                            // записываем в файл шифротекст
                            string temp = Encoding.Default.GetString(msEncrypt.ToArray());
                            System.IO.File.WriteAllText("et.txt", temp);

                            // записываем в файл ининциализационный вектор, алгоритм шифрования
                            temp = Encoding.Default.GetString(cur_IV);
                            System.IO.File.WriteAllText("data.txt", temp);
                        }
                    }
                }
            }
        }

        // расшифрование
        private void bDecrypt_Click(object sender, EventArgs e)
        {
            string text = "";

            // считать из файла текст для дешифрования
            if ((ofdOpenText.ShowDialog() == DialogResult.OK) && (ofdOpenText.FileName != ""))
            {
                StreamReader sr = new StreamReader(ofdOpenText.FileName, System.Text.Encoding.Default);
                text = sr.ReadToEnd();
                sr.Close();

                using (Aes myDES = Aes.Create())
                {
                    SHA512 shaM = new SHA512Managed();
                    byte[] password = Encoding.Default.GetBytes(rtbKeyFraze.Text);
                    cur_key = GetKey(shaM.ComputeHash(password), 32);

                    ICryptoTransform decryptor = myDES.CreateDecryptor(cur_key, cur_IV);
                    byte[] buf = Encoding.Default.GetBytes(text);
                    using (MemoryStream msDecrypt = new MemoryStream(buf))
                    {
                        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                            {
                                string temp = srDecrypt.ReadToEnd();
                                System.IO.File.WriteAllText("dt.txt", temp);
                            }
                        }
                    }
                }
            }
        }
    }
}
pupilMartyr вне форума Ответить с цитированием
Старый 02.12.2012, 13:04   #2
pupilMartyr
Пользователь
 
Аватар для pupilMartyr
 
Регистрация: 02.05.2011
Сообщений: 45
По умолчанию

Тема закрыта!
pupilMartyr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MFC vs NET Framework Char of Esenin Visual C++ 10 28.11.2013 09:51
Net Framework 2.0 и win7 Creatormaster Общие вопросы .NET 19 21.07.2013 11:45
NET Micro Framework LENA_M Фриланс 3 15.09.2012 05:11
Использование NET Framework Yar Помощь студентам 1 18.10.2007 19:33