Member 11905957 Ответов: 1

У меня есть некоторые ошибки плохие данные


Извините, у меня есть программа, и я получил какую-то ошибку. есть ошибка в "fsdecrypted.Write (новый StreamReader (csdec).ReadToEnd) "плохие данные" из моей программы, пожалуйста, помогите мне в моем обучении. спасибо, извините за мой плохой английский.

Что я уже пробовал:

Private Sub enkripataudekrip(ByVal inputfile As String, ByVal outputfile As String, ByVal direction As aksikripto)
        Dim fsinput As New FileStream(inputfile, FileMode.Open, FileAccess.Read)


        Select Case direction
            Case aksikripto.enkrip
                Dim fsoutput As New FileStream(outputfile, FileMode.OpenOrCreate, FileAccess.Write)
                Dim des As New DESCryptoServiceProvider
                Dim cs As New CryptoStream(fsoutput, des.CreateEncryptor, CryptoStreamMode.Write)

                Dim bytearrayinput(fsinput.Length - 1) As Byte
                fsinput.Read(bytearrayinput, 0, bytearrayinput.Length)
                cs.Write(bytearrayinput, 0, bytearrayinput.Length)
                cs.Close()

            Case aksikripto.dekrip
                Dim des As New DESCryptoServiceProvider
                Dim csdec As New CryptoStream(fsinput, des.CreateDecryptor, CryptoStreamMode.Read)

                Dim fsdecrypted As New StreamWriter(outputfile)
                fsdecrypted.Write(New StreamReader(csdec).ReadToEnd) 'bad DATA
                fsdecrypted.Flush()
                fsdecrypted.Close()

        End Select

    End Sub

1 Ответов

Рейтинг:
0

Dave Kreskowiak

"Плохие данные" говорят вам, что поток данных не может быть расшифрован с помощью крипто-провайдера, как вы его настроили, или входной поток неверен.

В вашем случае ваш метод "enkrip" записывает зашифрованный поток байтов в файл из массива входных байтов. Я так понимаю, что вы пытаетесь расшифровать этот файл обратно в исходный массив байтов. Проблема в том, что ваш код шифрования обрабатывает файл, который записывается, как то, что вы, вероятно, назвали бы "двоичным файлом" или потоком необработанных байтов. Ваши расшифровки кода, используя поток streamreader, который представляет собой текстовый читатель. Он пытается загрузить поток байтов и интерпретировать их как текст, а не как необработанные байты. Это изменение данных, поступающих из файла и отправляемых в Криптопоток.

Чтобы исправить это, вы должны обращаться с файлом точно так же. Вы написали файл с помощью FileStream, поэтому было бы неплохо прочитать тот же файл обратно с помощью FileStream, а не StreamReader.


Member 11905957

хорошо, спасибо за ваше предложение, сэр, но извините, что я все еще путаю, как прочитать тот же файл обратно с помощью filestream. вы можете научить меня, сэр?? спасибо..

Dave Kreskowiak

Ты шутишь? Вы используете файловый поток для чтения исходного файла. Это ничем не отличается, но вместо того, чтобы читать, вы делаете .Писать. Это также очень помогло бы, если бы вы прочитали документацию по классу FileStream. Там есть примеры того, как его использовать.