Исследование текстовых файлов и обработка строк
Шифрование текста с помощью изменения ASCII-кодов
- Закройте решение Sort Text и откройте проект Encrypt Text, расположенный в папке c:\vbnet03sbs\Гл.12\encrypt text.
- Чтобы запустить программу, щелкните на кнопке Start (Начать).
- Введите в текстовое поле какой-нибудь текст.
-
В меню Файл щелкните на команде Сохранить зашифрованный файл как и сохраните этот файл в папке c:\vbnet03sbs\Гл.12 под именем padua.txt. Когда вы сохраняете текстовый файл, программа изменяет ASCII-код и отображает результаты в текстовом поле, показанном ниже.
Если вы откроете этот файл в Microsoft Word или другом текстовом редакторе, то увидите тот же результат - для защиты от несанкционированного прочтения символы в файле были зашифрованы.
-
Чтобы восстановить файл в его первоначальном виде, выберите в меню Файл команду Открыть зашифрованный файл и откройте файл padua.txt из папки c:\vbnet03sbs\Гл.12. Снова появится файл в его оригинальном виде, показанный ниже.
В нижней части окна текстового поля вы можете увидеть один или два дополнительных символа, которые зависят от количества символов возврата каретки и/или перевода строки, которые вы ввели в конце документа.
- В меню Файл щелкните на команде Выход и завершите программу.
Изучение кода программы Encrypt
-
Чтобы посмотреть код программы, выполняющей увиденное вами при работе с программой шифрование, откройте в Редакторе кода процедуру события 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.
-
Теперь, чтобы увидеть, как программа производит расшифровку, отобразите в Редакторе кода процедуру события 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-сдвиг, требуемый для восстановления этих общих символов и запустив преобразование для всего текстового файла, человек, опытный в шифровании, может с легкостью расшифровать содержимое файла. Этот метод шифрования также не защищает от злонамеренного "физического" воздействия на файл - например, его можно просто удалить, если он не защищен в вашей системе, или его можно определенным образом изменить. Но если вы просто хотите быстро скрыть информацию, эта простая схема шифрования - то, что нужно.