Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Для знатоков. Есть проблема с RichTextBox1 Добавлено: 17.01.07 00:03  

Автор вопроса:  Георгич

Ответить

  Ответы Всего ответов: 32  

Номер ответа: 16
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #16 Добавлено: 23.01.07 22:44
Я ещё не отшлифовал свой код, надо поэкспериментировать, но на данном этапе получается так, что при шифровании если я оставляю тип (Dim B As Byte), то при дешифровке получаю ряды цифр, а если (Chr(B)), то получаю исходный файл с текстом , картинками и т.д. В очередной раз послушаю совет, поработаю над этим.

Ответить

Номер ответа: 17
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 24.01.07 08:24
по ходу ты все не верно делаешь, ибо при шифровании как правило используется массив байт.... создай тестовый проект со своим кодом и выложи его сюда.. пока не увижу код ничего более конкретного подсказать не смогу

Ответить

Номер ответа: 18
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #18 Добавлено: 24.01.07 09:10
Интерфейс ICryptoTransform позволяет шифровать массив байт, также можно шифровать поток, если использовать CryptoStream (который в свою очередь использует методы интерфейса ICryptoStream для шифрования блоков байт).

Все остальное - это надстройки над этими двумя методами, в любом случае я бы хотел увидеть кодом, что значится под:
К стати шифровал не через массивы байт. а через файловые потоки.

Ответить

Номер ответа: 19
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #19 Добавлено: 24.01.07 18:56
Всё, я разобрался, просто при записи криптографического потока, по запарке использовал StreamWriter, а надо BinaryWriter и соответственно ни каких (Chr(B)).Полный порядок.

Ответить

Номер ответа: 20
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #20 Добавлено: 24.01.07 19:29
Понятно , что создание ключей пропущено, создание случайного вектора , тоже пропущена
И их запись.
Ознакомительный пример на потоки :


Private Sub ButtonШифровать_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonШифровать.Click

Dim Трансформ As System.Security.Cryptography.ICryptoTransform = Rijndael.CreateEncryptor()

        ;Dim ПотокДанныхИзФайла As New System.IO.FileStream("C:\Файл Считывания.RTF", IO.FileMode.Open)
        ;Dim СчитатьДвоичный As New System.IO.BinaryReader(ПотокДанныхИзФайла)
        ;Dim B As Byte

        ;Dim ЗаписьПотокаФайл As New IO.FileStream("C:\Файл Записи.RTF", IO.FileMode.Create) Dim ЗаписатьДвоичный As New IO.StreamWriter(ЗаписьПотокаФайл)

                ;Dim cs As New System.Security.Cryptography.CryptoStream(ЗаписьПотокаФайл, Трансформ, Security.Cryptography.CryptoStreamMode.Write)
        ;Dim w As New System.IO.BinaryWriter(cs)


        ;Do Until СчитатьДвоичный.PeekChar = -1


            B = СчитатьДвоичный.Read


            w.Write((B))
        Loop



        w.Flush()
        cs.FlushFinalBlock()

        ЗаписатьДвоичный.Close()
        ЗаписьПотокаФайл.Close()
        ПотокДанныхИзФайла.Close()
  End Sub

Private Sub ButtonДешифратор_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonДешифратор.Click

  ;Dim B As Byte

        'Создание интерфейса преобразования для дешифрования
        ;Dim Трансформ As System.Security.Cryptography.ICryptoTransform = Rijndael.CreateDecryptor

        'Создание криптографического потока в режиме чтения
        ;Dim cs As New System.Security.Cryptography.CryptoStream(fs, Трансформ, Security.Cryptography.CryptoStreamMode.Read)

        'Создание объекта чтения из файла
        ;Dim r As New System.IO.StreamReader(cs)

                ;Dim ЗаписьПотокаФайл As New IO.FileStream("C:\Дешифрованный файл.RTF", IO.FileMode.Create)
        ;Dim ЗаписатьДвоичный As New IO.BinaryWriter(ЗаписьПотокаФайл)


        ;Do Until r.Peek = -1
            B = r.Read
           
            ЗаписатьДвоичный.Write((B))
            
        Loop

        cs.Close()
        fs.Close()
        ЗаписатьДвоичный.Close()
        ЗаписьПотокаФайл.Close()
  End Sub

Ответить

Номер ответа: 21
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #21 Добавлено: 24.01.07 19:55
Пропустил одну строку в дешифровке её можно поставить перед Dim B As Byte

Dim fs As New System.IO.FileStream("C:\Файл Записи.RTF", IO.FileMode.Open)

Ответить

Номер ответа: 22
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #22 Добавлено: 25.01.07 10:48
Я ещё не отшлифовал свой код

А это, я так полагаю, ты выложил отшлифованный код?

Ответить

Номер ответа: 23
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #23 Добавлено: 25.01.07 10:57
Вместо Do...Loop можно ReadToEnd использовать...

Ответить

Номер ответа: 24
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #24 Добавлено: 25.01.07 12:47
Вместо Do...Loop можно ReadToEnd использовать...

ReadToEnd ему не интересно.. ему даже блоками читать/писать не интересно, раз он это все по 1 байту делает.. А через некоторое время будет говорить что NET тормозит при шифровке больших файлов! )))

Ответить

Номер ответа: 25
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #25 Добавлено: 25.01.07 21:50
Ну господа, вы прям накинулись на меня :
1)Насчёт отшлифованности , я не зря написал перед кодом «Ознакомительный пример на потоки :»
2) ReadToEnd и ReadBlock не является членом System.IO.BinaryWriter
3) Объект CryptoStream шифрует данные по одному блоку за раз , интересно какими блоками мне считывать при дешифровке?
4) Если Использовать в дешифровке ЗаписатьДвоичный.Write(r.ReadToEnd), то получаем текстовую ерунду, а не исходный файл, я пробовал.
5)На счёт, скорости, поместил в "C:\Файл Считывания.RTF" 30 стр.текста и 5 картинок (790 КБ)
Зашифровалось всё это на 6200 стр. за 2-3 сек., расшифровалось 1-2 сек.

Ответить

Номер ответа: 26
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #26 Добавлено: 26.01.07 08:39
Георгич, к сожалению давно не работаю под VS2003 и не могу набросать для тебя пример, но твое решение явно неэффективное. Я считаю, что это некорректно читать/писать по 1 байту, хотя , разумеется, это ничему не противоречит. Но это очень сильно снизит эффективность приложения и нагрузит систему. Тебе необходимо использовать буфер, в который читать весь файл одним разом и писать одним разом.. либо, раз уж ты с потоками решил делать, то читать и писать блоками по 1024, 2048, 4096 & etc байт.

Ответить

Номер ответа: 27
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #27 Добавлено: 26.01.07 08:47
ReadToEnd и ReadBlock не является членом System.IO.BinaryWriter

Writer по определению предназначен для записи, и соответственно он не может читать..

Ответить

Номер ответа: 28
Автор ответа:
 Георгич



Вопросов: 16
Ответов: 52
 Профиль | | #28 Добавлено: 28.01.07 00:40
Да, совершенно верно, система загружается с пересчётом байтов, весьма сильно, разница особенно чувствуется когда я применил новый код , обидно, ведь я с него (с кода) начинал шифрование, оказывается есть огромная разница между (RichTextBox1.Text()) или (RichTextBox1.SelectedText()) с RichTextBox1.SelectedRtf
Ознакомительный пример:
Private Sub ButtonШифровать_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonШифровать.Click

RichTextBox1.LoadFile("c:\Файл.RTF";) ' грузим файл в RichTextBox1, чтобы не создавать текст,картинки в ручную

Dim Трансформ As System.Security.Cryptography.ICryptoTransform = Rijndael.CreateEncryptor()

        ;Dim ЗаписьФайл As New IO.FileStream("C:\Файл Записи.RTF", IO.FileMode.Create)
)

        ;Dim cs As New System.Security.Cryptography.CryptoStream(ЗаписьФайл, Трансформ, Security.Cryptography.CryptoStreamMode.Write)

        ;Dim w As New System.IO.StreamWriter(cs)
        RichTextBox1.SelectAll()
        w.Write(RichTextBox1.SelectedRtf)
        w.Flush()
        cs.FlushFinalBlock()
        w.Close()
End Sub

Private Sub ButtonДешифратор_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonДешифратор.Click

Dim fs As New System.IO.FileStream("C:\Файл Записи.RTF", IO.FileMode.Open)

   ;Dim Трансформ As System.Security.Cryptography.ICryptoTransform = Rijndael.CreateDecryptor
        ;Dim cs As New System.Security.Cryptography.CryptoStream(fs, Трансформ, Security.Cryptography.CryptoStreamMode.Read)
        ;Dim r As New System.IO.StreamReader(cs)
        RichTextBox1.SelectedRtf = r.ReadToEnd

        r.Close()

    End Sub
Не массивов, не циклов, скорость шифровки и дешифровки высочайшая , картинки текст все на месте ,
Так что , думаю проблема решена.

Ответить

Номер ответа: 29
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #29 Добавлено: 28.01.07 13:57
RichTextBox1.SelectAll()
w.Write(RichTextBox1.SelectedRtf)

Выделять весь текст .. хм.. тоже не совсем корректно.. наверняка есть свойство позволяющее забрать весь rtf-текст без его предварительного выделения..

Ответить

Номер ответа: 30
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #30 Добавлено: 28.01.07 14:05
RichTextBox.RTF

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам