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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2012, 09:30   #1
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
Вопрос Расшифровывание файла

Привет.

Возникла проблема с расшифровкой файла который предварительно зашифровал при расшифровке выдает ошибку плохие данные вот код метода:
Код:
        static void DecryptFile(string sInputFilename, string sOutputFilename, string sKey)
        {
            DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
            // 64-битный ключ и IV требуется для этого провайдера.
            // Установить секретный ключ для алгоритма DES
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            //Инициализируем вектор.
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            Console.ReadLine();
            //Создаем файл который будем читать т.е. зашифрованый.
            FileStream fsread = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
            //Создаем расшифровщик DES из экземпляра DES.
            ICryptoTransform desdecrypt = DES.CreateDecryptor();
            // Создание крипто потока для чтения и DES расшифровки преобразования для входящих байтов.
            CryptoStream cryptostreamDecr = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
            //Пишем содержимого расшифрованного файла.
            StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
            fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
            fsDecrypted.Flush();
            fsDecrypted.Close();
        }
при записи нового файла:
Код:
fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
Что то не пойму в собственно он видит там плохие данные? Вроде бы все написано по правилам
hitman12 вне форума Ответить с цитированием
Старый 08.02.2012, 10:23   #2
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
По умолчанию

ни кто этим не занимался?
hitman12 вне форума Ответить с цитированием
Старый 08.02.2012, 12:12   #3
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Дай код шифровки. Или хотя бы пример файла

Пальцем в небо врятли кто тыкать будет
Guy вне форума Ответить с цитированием
Старый 08.02.2012, 12:33   #4
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
По умолчанию

конечно вот)
Вложения
Тип файла: rar Program.rar (1.9 Кб, 13 просмотров)
hitman12 вне форума Ответить с цитированием
Старый 09.02.2012, 11:09   #5
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

не дошло время дописать, смысл в том чтобы брать буфер байтов из потока и писать в файл byte[]
Guy вне форума Ответить с цитированием
Старый 09.02.2012, 16:56   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Отсюда:
Код:
using System;
using System.IO;
using System.Security.Cryptography;

namespace RijndaelManaged_Example
{
    class RijndaelExample
    {
        public static void Main()
        {
            try
            {

                string original = "Here is some data to encrypt!";

                // Create a new instance of the Rijndael
                // class.  This generates a new key and initialization 
                // vector (IV).
                using (Rijndael myRijndael = Rijndael.Create())
                {
                    // Encrypt the string to an array of bytes.
                    byte[] encrypted = EncryptStringToBytes(original, myRijndael.Key, myRijndael.IV);

                    // Decrypt the bytes to a string.
                    string roundtrip = DecryptStringFromBytes(encrypted, myRijndael.Key, myRijndael.IV);

                    //Display the original data and the decrypted data.
                    Console.WriteLine("Original:   {0}", original);
                    Console.WriteLine("Round Trip: {0}", roundtrip);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e.Message);
            }
        }
        static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("Key");
            byte[] encrypted;
            // Create an Rijndael object
            // with the specified key and IV.
            using (Rijndael rijAlg = Rijndael.Create())
            {
                rijAlg.Key = Key;
                rijAlg.IV = IV;

                // Create a decrytor to perform the stream transform.
                ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);

                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {

                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }


            // Return the encrypted bytes from the memory stream.
            return encrypted;

        }

        static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("Key");

            // Declare the string used to hold
            // the decrypted text.
            string plaintext = null;

            // Create an Rijndael object
            // with the specified key and IV.
            using (Rijndael rijAlg = Rijndael.Create())
            {
                rijAlg.Key = Key;
                rijAlg.IV = IV;

                // Create a decrytor to perform the stream transform.
                ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);

                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {

                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }

            }

            return plaintext;

        }
    }
}
Откуда Вы возьмете строку- "Here is some data to encrypt!", уже дело десятое, хоть из файла читайте, хоть еще как.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 09.02.2012, 18:27   #7
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
По умолчанию

Большое спасибо =)
hitman12 вне форума Ответить с цитированием
Старый 10.02.2012, 12:39   #8
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Отсюда:
Откуда Вы возьмете строку- "Here is some data to encrypt!", уже дело десятое, хоть из файла читайте, хоть еще как.
Здесь описана шифровка текста тогда возникает вопрос как работать с бинарными файлами как их зашифровать и расшифровать?
hitman12 вне форума Ответить с цитированием
Старый 10.02.2012, 13:17   #9
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

А что Вас смущает?.. Считывайте бинарный файл, как строку(Вам же не надо ее обрабатывать), шифруйте, записывайте полученное обратно. Когда понадобиться считайте опять, как строку, дешифруйте, пишите. Потом уже можете обрабатывать файл как угодно. Это самый простой вариант. Можно изменить функцию, в которой происходит шифрование. Например передать в
Код:
 using (MemoryStream msDecrypt = new MemoryStream(cipherText))
Не cipherText, а массив byte[], который прочитан из бинарного файла.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 10.02.2012, 14:17   #10
hitman12
Пользователь
 
Аватар для hitman12
 
Регистрация: 20.09.2009
Сообщений: 88
По умолчанию

http://www.codeproject.com/Articles/...ting-data-in-C

Вот тут получше рассказывается и и более понятный пример) может кому пригодится
hitman12 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перед открытием файла программа должна спрашивать адрес файла Belii09878 Помощь студентам 1 07.03.2010 16:37
Перезапись файла без путя или определение расположения файла программы The Best Общие вопросы Delphi 4 13.07.2009 22:50
Два XL файла, данные 1-го файла являются частью другого в формуле 2-го Кот Microsoft Office Excel 2 14.08.2007 16:56