Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Недопустимая длина данных для дешифрования


Автор: DimkraS 3.3.2010, 13:15
Здравствуйте.
Сделал две программы. 
Первая считывает данные из текстового файла, каждая строка файла шифруется во временный файл, затем считывается и записывается в другой файл но уже после предыдущей строки, получается файл в которой каждая отдельная строка зашифрована.

Код

Dim Чтение As New System.IO.StreamReader(Имя + ".txt", System.Text.ASCIIEncoding.GetEncoding(1251))
i = -1
p = -1
Do While Чтение.Peek() <> -1
      i = i + 1
      ReDim Preserve s(i)
      s(i) = Чтение.ReadLine
      Dim RMCrypto As New Security.Cryptography.RijndaelManaged
      Dim fs As New IO.FileStream("Шифрование.txt", IO.FileMode.Create)
      Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateEncryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Write)
      Dim SWriter As New IO.StreamWriter(CryptStream)
      SWriter.WriteLine(s(i))
      SWriter.Close()
      fs.Close()
      CryptStream.Close()
      Dim Чтение2 As New System.IO.StreamReader("Шифрование.txt", System.Text.ASCIIEncoding.GetEncoding(1251))
      Dim Дозапись As New System.IO.StreamWriter(Имя + "(2)" + ".txt", True, System.Text.ASCIIEncoding.GetEncoding(1251))
      Дозапись.WriteLine(Чтение2.ReadLine)
      Дозапись.Close()
      Чтение2.Close()
Loop
Чтение.Close()


Вторая программ, открывает файл с шифрованными данными, считывает строку, затем записывает её во временный файл, и расшифровывает её из файла в массив.

Код

Dim Чтение As New System.IO.StreamReader(Имя + ".txt", System.Text.ASCIIEncoding.GetEncoding(1251))
        i = -1
        p = -1
        Do While Чтение.Peek() <> -1
            i = i + 1

            Dim Дозапись As New System.IO.StreamWriter("C:\temp.txt", True, System.Text.ASCIIEncoding.GetEncoding(1251))
            Дозапись.WriteLine(Чтение.ReadLine)
            Дозапись.Close()

            Dim RMCrypto As New Security.Cryptography.RijndaelManaged
            Dim fs As New IO.FileStream("C:\temp.txt", IO.FileMode.Open)
            Dim CryptStream As New Security.Cryptography.CryptoStream(fs, RMCrypto.CreateDecryptor(Key, IV), Security.Cryptography.CryptoStreamMode.Read)
            Dim SReader As New IO.StreamReader(CryptStream)
            ReDim Preserve s(i)
            s(i) = SReader.ReadToEnd()
            SReader.Close()
            fs.Close()
            CryptStream.Close()
            Kill("C:\temp.txt")
        Loop
        Чтение.Close()


Расшифровать из файла в массив не удаётся, выходит ошибка "Недопустимая длина данных для дешифрования". Если расшифровывать данные из того же файла в который зашифровали, то всё нормально, но мне нужно хранить зашифрованные данные в файле построчно, поэтому я каждую строку переношу в отдельный файл для расшифровки. Заметил так же, что когда данные шифруются в текстовый файл, то не создаётся следующей пустой строки, а во временных файлах откуда я расшифровываю, пустая строка в конце создаётся, пробовал останавливать программу после создания файла и вручную убирать эту строку, всё равно выходит та же ошибка. Подскажите, как можно её исправить?

ps В оформлении кода указываю что пишу на VB.NET, но код всё равно не оформляется

Автор: Freyzer 3.3.2010, 17:25
Для начала, попробуй кириллицу на латиницу измини, а там уже видно будет.

Автор: DimkraS 23.4.2010, 15:09
Неполучается

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)