Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шифрование Dictionary 
V
    Опции темы
Unsane
Дата 8.4.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.6.2007

Репутация: 2
Всего: 5



Делаю настройки для программы. Необходимо зашифровать и расшифровать Dictionary<string, MyClass>.
Полдня сижу и не могу свести дебет с кредитом(сериализовать - зашифровать - сохранить в файл - прочитать файл - расшифровать - десериализовать).
Код

        #region ICD

        int ICD.Load(string Path, string Password)
        {
            byte[] buffer = new byte[] { };

            SymmetricAlgorithm sa = Rijndael.Create();

            using (FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
            {
                using (CryptoStream cs = new CryptoStream(fs, sa.CreateEncryptor((new PasswordDeriveBytes(Password, null)).GetBytes(32), new byte[16]), CryptoStreamMode.Read))
                {
                    buffer = new byte[fs.Length];
                    cs.Read(buffer, 0, buffer.Length);
                    cs.FlushFinalBlock();
                }
            }

            using (MemoryStream ms = new MemoryStream(buffer))
            {
                BinaryFormatter bf = new BinaryFormatter();

                object locker = new object();
                lock (locker)
                {
                    this._database = (Dictionary<string, MyClass>)bf.Deserialize(ms); //System.Runtime.Serialization.SerializationException was unhandled. 
                    //Binary stream '163' does not contain a valid BinaryHeader. 
                    //Possible causes are invalid stream or object version change between serialization and deserialization.

                }
            }

            return 0;
        }

        int ICD.Save(string Path, string Password)
        {
            object locker = new object();
            lock (locker)
            {
                byte[] buffer = new byte[] { };

                using (MemoryStream ms = new MemoryStream())
                {
                    BinaryFormatter bf = new BinaryFormatter();
                    bf.Serialize(ms, this._database);
                    buffer = ms.ToArray();
                }

                SymmetricAlgorithm sa = Rijndael.Create();

                using (FileStream fs = new FileStream(Path, FileMode.Create, FileAccess.Write))
                {
                    using (CryptoStream cs = new CryptoStream(fs, sa.CreateEncryptor((new PasswordDeriveBytes(Password,null)).GetBytes(32), new byte[16]), CryptoStreamMode.Write))
                    {
                        cs.Write(buffer, 0, buffer.Length);
                        cs.FlushFinalBlock();
                    }
                }
            }

            return 0;
        }

        #endregion;

Ткните носом где неправильно. Заранее спасибо..

Это сообщение отредактировал(а) Unsane - 8.4.2009, 22:55
--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
PashaPash
Дата 9.4.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Unsane, давно не лез в System.Security.Cryptography, но в  Load у тебя расшифровка, вроде должен вызывать CreateDecryptor, а сейчас - CreateEncryptor.


--------------------
PM MAIL WWW   Вверх
Unsane
Дата 9.4.2009, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 8.6.2007

Репутация: 2
Всего: 5



Оно работает..
 smile Позор на мою тупую голову..
--------------------
Я дурак.. Этим и интересен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.