Поделиться через


Анализ кода классов Utility (пример CNG)

Файл Utilities.cs примера защищенного обмена данными с шифрованием CNG содержит флаги управления и методы уровня приложения, которые используются в проектах Alice, Bob и Mallory.Эти флаги и методы рассматриваются в следующих подразделах.

  • Флаги Version, fVerbose и fMallory

  • Метод Autoloader

  • Метод InitConsole

  • Метод SplashScreen

  • Методы ReadALine и ReadAChar

  • Метод InitializeOptions

  • Методы Display

Общие сведения о примере см. в разделе Пример защищенного обмена данными с шифрованием CNG.

Флаги Version, fVerbose и fMallory

  • Version: целое значение, определяющее демонстрируемую модель безопасности в соответствии со следующей таблицей.

    Version

    Модель безопасности

    1

    Без шифрования (сообщения в виде открытого текста).

    2

    Зашифрованные сообщения.

    3

    Незащищенные цифровые подписи, используемые с ключами шифрования и зашифрованными сообщениями.

    4

    Защищенные цифровые подписи, используемые с ключами шифрования и зашифрованными сообщениями.

    5

    Завершение работы программы в случае ошибок безопасности.

  • fVerbose: логическое значение, которое определяет выводимые на экран данные.Если значение равно true, будут отображаться все сообщения в кодировке ASCII и в зашифрованном формате.Если значение равно false, будут отображаться только сообщения в кодировке ASCII.

  • fMallory: логическое значение, которое определяет, включен ли проект Мэллори.Если значение равно true, Мэллори участвует в работе примера.Если значение равно false, пример выполняется без вмешательства Мэллори.Этот флаг позволяет удобным образом проводить анализ "было-стало" для атаки "злоумышленник в середине".

Метод Autoloader

static bool Autoloader()

Этот метод загружает программы Bob.exe и Mallory.exe.Он вызывается приложением Алисы в самом начале метода Main.

Метод Autoloader определяет способ запуска приложения Алисы — автономно или через Visual Studio.Для этого он вызывает метод Process.GetProcessesByName(String), чтобы получить компонент Process, связанный с процессом Alice.exe.

  • Если метод Autoloader получает компонент Process, это значит, что приложение Алисы было запущено автономно.Приложение Алисы запускает программы Bob.exe и Mallory.exe путем вызова метода Process.Start(String) для приложений Боба и Мэллори.Если файлы Bob.exe и Mallory.exe найти не удается, создается исключение.

  • Если метод Autoloader не получает компонента Process, это означает, что программа Alice.exe была запущена через Visual Studio.В этом случае необходимо вручную запустить программы Bob.exe и Mallory.exe, загрузив их через два отдельных экземпляра отладчика Visual Studio.

Дополнительные сведения о методе Autoloader см. в разделе Практическое руководство. Построение и запуск примера CNG.

Метод InitConsole

static void InitConsole(string name, int left, int top)

Этот метод принимает строку и два целых значения.Строка используется в качестве заголовка окна консоли.Целые значения задают координаты по умолчанию для положения на экране верхней левой точки окна консоли.

Каждое из окон помещается в соответствии с координатами по умолчанию.Окно Алисы помещается в левом верхнем углу экрана.Окно Боба помещается в правом верхнем углу экрана.А окно Мэллори помещается под окнами Алисы и Боба.

Два объявления вызова неуправляемого кода обеспечивают доступ к неуправляемым функциям Win32 MoveWindow и GetConsoleWindow, обеспечивающим фактическое позиционирование окон.

Метод SplashScreen

static void SplashScreen()

Этот метод очищает окно консоли и создает заголовки для окон Алисы, Боба и Мэллори.

Методы ReadALine и ReadAChar

static string ReadALine(bool fBlankOkay)
static string ReadAChar(string options)

Эти небольшие служебные методы служат для создания оболочки вызовам метода Console.ReadLine.

Метод ReadALine принимает логическое значение.Если значение равно true, метод ReadALine завершается, когда пользователь нажимает клавишу ВВОД.Если значение равно false, метод ReadALine не завершит работу, пока пользователь не введет хотя бы один знак и не нажмет клавишу ВВОД.

Метод ReadAChar принимает строку знаков и завершает работу, когда пользователь вводит в строку один знак.

Метод InitializeOptions

static string InitializeOptions()

Этот метод предоставляет меню для задания описанных ранее в этом разделе флагов Version, fVerbose и fMallory.Кроме того, пользователь может выбрать значение "x", чтобы закрыть приложение.

Методы Display

В файле Utilities.cs определено два метода Display.

  • static void Display(string s)

    Этот метод передает строку и текущее значение MyColor второму (перегруженному) методу Display.

  • static void Display(string DisplayString, int color)

    Этот метод служит оболочкой вызовов метода Console.WriteLine и выводит текст с цветовым кодированием.Использование цветов позволяет быстрее понять, кто является автором того или иного сообщения.Например, сообщения Алисы во всех трех окнах отображаются зеленым.В следующей таблице перечислены используемые в примере цвета и их значения.

ИД

Цвет

Использование

0

Красный

Сообщения об ошибках безопасности.

1

Желтый

Параметры меню и сообщения приложений.

2

Белый

Сообщения Боба.

3

Голубой

Текст, вводимый пользователем.

4

Зеленый

Сообщения Алисы.

5

Фиолетовый

Сообщения Мэллори.

6

Желтый

Сообщение о перезапуске приложения.

7

Серый

Данные зашифрованных сообщений.

См. также

Ссылки

Console

ConsoleColor

Основные понятия

Пример защищенного обмена данными с шифрованием CNG

Исходный код файла Utilities.cs (пример CNG)

Общие сведения об исходном коде (пример CNG)

Другие ресурсы

Маршалинг данных при вызове неуправляемого кода