Опубликован: 31.08.2006 | Доступ: свободный | Студентов: 3975 / 230 | Оценка: 4.14 / 3.89 | Длительность: 39:16:00
ISBN: 978-5-9570-0021-3
Лекция 13:

Исследование текстовых файлов и обработка строк

Шифрование текста с помощью изменения ASCII-кодов

  1. Закройте решение Sort Text и откройте проект Encrypt Text, расположенный в папке c:\vbnet03sbs\Гл.12\encrypt text.
  2. Чтобы запустить программу, щелкните на кнопке Start (Начать).
  3. Введите в текстовое поле какой-нибудь текст.
  4. В меню Файл щелкните на команде Сохранить зашифрованный файл как и сохраните этот файл в папке c:\vbnet03sbs\Гл.12 под именем padua.txt. Когда вы сохраняете текстовый файл, программа изменяет ASCII-код и отображает результаты в текстовом поле, показанном ниже.


    Если вы откроете этот файл в Microsoft Word или другом текстовом редакторе, то увидите тот же результат - для защиты от несанкционированного прочтения символы в файле были зашифрованы.

  5. Чтобы восстановить файл в его первоначальном виде, выберите в меню Файл команду Открыть зашифрованный файл и откройте файл padua.txt из папки c:\vbnet03sbs\Гл.12. Снова появится файл в его оригинальном виде, показанный ниже.


    В нижней части окна текстового поля вы можете увидеть один или два дополнительных символа, которые зависят от количества символов возврата каретки и/или перевода строки, которые вы ввели в конце документа.

  6. В меню Файл щелкните на команде Выход и завершите программу.

Изучение кода программы Encrypt

  1. Чтобы посмотреть код программы, выполняющей увиденное вами при работе с программой шифрование, откройте в Редакторе кода процедуру события mnuSaveAsItem_Click. Хотя эффект, который вы видели, может выглядеть несколько загадочно, это была довольно простая схема шифрования. С помощью функций Asc и Chr и цикла For я просто вычитал из ASCII-кода каждого символа из текстового поля некоторое число, а затем сохранял зашифрованную строку в указанном текстовом файле. Здесь приведена полная процедура события.

    Dim Encrypt As String = ""
    Dim letter As Char
    Dim i, charsInFile  As Short
    SaveFileDialog1.Filter = "Текстовые файлы (*.txt)¦*.txt"
    SaveFileDialog1.ShowDialog()
    If SaveFileDialog1.FileName <> "" Then
    	'сохраняем текст с помощью схемы шифрования (ASCII-код + 1)
    	charsInFile  = txtNote.Text.Length
    	For i = 0 To charsInFile - 1
    		letter = txtNote.Text.Substring(i, 1)
    		'определяем ASCII-код и вычитаем из него единицу
    		Encrypt = Encrypt & Chr(Asc(letter) - 1)
    	Next
    
    	FileOpen(1, SaveFileDialog1.FileName, OpenMode.Output)
    	PrintLine(1, Encrypt)			'копируем текст на диск
    	FileClose(1)
    	txtNote.Text = Encrypt
    	txtNote.Select(1, 0)			'удаляем выделение текста
    	mnuCloseItem.Enabled = True
    End If

    Обратите особое внимание на оператор

    Encrypt = Encrypt & Chr(Asc(letter) - 1)

    который определяет ASCII-код текущего символа, вычитает из него 1, преобразует ASCII-код обратно в символ и добавляет его к строке Encrypt.

  2. Теперь, чтобы увидеть, как программа производит расшифровку, отобразите в Редакторе кода процедуру события mnuOpenItem_Click. Этот код программы почти идентичен тому, который связан с командой Сохранить зашифрованный файл как, но вместо того, чтобы вычитать из ASCII-кода каждого символа по единице, он эту единицу прибавляет. Вот полная процедура события mnuOpenItem_Click:

    Dim AllText, LineOfText As String
    Dim i, charsInFile As Short
    Dim letter As Char
    Dim Decrypt As String = ""
    OpenFileDialog1.Filter = "Текстовые файлы (*.TXT)|*.TXT"
    OpenFileDialog1.ShowDialog()		' отображаем диалоговое окно Открыть
    If OpenFileDialog1.FileName <> "" Then
    	Try		'открываем файл и перехватываем все ошибки с помощью обработчика
    		FileOpen(1, OpenFileDialog1.FileName, OpenMode.Input)
    		Do Until EOF(1)				'читаем строки из файла
    			LineOfText = LineInput(1)
    			'добавляем каждую строку в переменную AllText
    
    			AllText = AllText & LineOfText & vbCrLf
    		Loop
    
    		'теперь расшифровываем строку, вычитая единицу из ASCII-кода
    		charsInFile = AllText.Length		'получаем длину строки
    		For i = 0 To charsInFile- 1	'перебираем в цикле все символы
    			letter = AllText.Substring(i, 1)	'получаем символ
    			Decrypt = Decrypt & Chr(Asc(letter) + 1)	'прибавляем 1
    		Next I						'и создаем новую строку
    		txtNote.Text = Decrypt	'затем отображаем преобразованную строку
    		lblNote.Text = OpenFileDialog1.FileName
    		txtNote.Select(1, 0)			'удаляем выделение текста
    		txtNote.Enabled = True			'включаем текстовый курсор
    		mnuCloseItem.Enabled = True		'включаем команду Закрыть
    		mnuOpenItem.Enabled = False		'отключаем команду Открыть
    	Catch
    		MsgBox("Ошибка открытия файла. Возможно, файл слишком большой.")
    	Finally
    		FileClose(1)					'закрываем файл
    	End Try
    End If

Этот тип простого шифрования может быть именно тем, что вам требуется для сокрытия информации в ваших текстовых файлах. Однако файлы, зашифрованные таким способом, могут быть легко расшифрованы. Используя поиск вероятных эквивалентов общих символов, таких, как пробелы, определив ASCII-сдвиг, требуемый для восстановления этих общих символов и запустив преобразование для всего текстового файла, человек, опытный в шифровании, может с легкостью расшифровать содержимое файла. Этот метод шифрования также не защищает от злонамеренного "физического" воздействия на файл - например, его можно просто удалить, если он не защищен в вашей системе, или его можно определенным образом изменить. Но если вы просто хотите быстро скрыть информацию, эта простая схема шифрования - то, что нужно.

Сайдахмад Зарипов
Сайдахмад Зарипов
Жанболат Шаймерден
Жанболат Шаймерден

Можно ли выбирать язык для надписей и команд в среде разработки?