实用工具类的代码分析(CNG 示例)
下一代加密技术 (CNG) 安全通信示例中的 Utilities.cs 文件提供了 Alice、Bob 和 Mallory 项目所使用的应用程序范围的控制标志和方法。以下几部分讨论了这些标志和方法:
Version、fVerbose 和 fMallory 标志
Autoloader 方法
InitConsole 方法
SplashScreen 方法
ReadALine 和 ReadAChar 方法
InitializeOptions 方法
Display 方法
有关该示例的概述,请参见下一代加密技术 (CNG) 安全通信示例。
Version、fVerbose 和 fMallory 标志
Version:一个整数值,用于确定演示的安全模型,其定义如下表所示。
版本
安全模型
1
不加密(明文消息)。
2
加密的消息。
3
用于加密密钥和加密消息的非安全数字签名。
4
用于加密密钥和加密消息的安全数字签名。
5
在发生安全性错误时程序终止。
fVerbose:一个布尔值,用于控制显示输出。如果值为 true,将显示 ASCII 格式和加密格式的所有消息。如果值为 false,则仅显示 ASCII 格式的消息。
fMallory:一个布尔值,用于控制 Mallory 项目是否启用。如果值为 true,则运行带有 Mallory 的示例。如果值为 false,则运行不含 Mallory 的截获的示例。使用此标志便于进行中间人攻击前后分析。
Autoloader 方法
static bool Autoloader()
此方法加载 Bob.exe 和 Mallory.exe,由 Alice 在其 Main 方法开始时调用。
Autoloader 检测 Alice 是作为独立应用程序加载,还是由 Visual Studio 加载。它执行此操作的方法是:调用 Process.GetProcessesByName(String) 方法以获取与 Alice.exe 进程关联的 Process 组件。
如果 autoloader 获取了 Process 组件,则 Alice 是一个独立应用程序。Alice 通过对 Bob 和 Mallory 调用 Process.Start(String) 方法来启动 Bob.exe 和 Mallory.exe。如果找不到 Bob.exe 或 Mallory.exe,则会引发异常。
如果 autoloader 未获取 Process 组件,则表示 Alice.exe 由 Visual Studio 加载。在这种情况下,必须通过使用 Visual Studio 调试器的两个单独实例分别加载 Bob.exe 和 Mallory.exe 来手动运行这两个程序。
有关 autoloader 的更多信息,请参见如何:生成并运行 CNG 示例。
InitConsole 方法
static void InitConsole(string name, int left, int top)
此方法接受一个字符串和两个整数。字符串用于指定控制台窗口的标题。整数表示用于在屏幕上定位控制台窗口的默认左侧和顶部像素坐标。
每个窗口都根据默认坐标进行定位。Alice 的窗口定位在屏幕的左上角。Bob 的窗口定位在屏幕的右上角。Mallory 的窗口定位在 Alice 和 Bob 的窗口下面。
两个平台调用声明提供了对执行实际定位的非托管 Win32 函数 MoveWindow 和 GetConsoleWindow 的访问。
SplashScreen 方法
static void SplashScreen()
此方法清空控制台,并为 Alice、Bob 和 Mallory 窗口提供标题。
ReadALine 和 ReadAChar 方法
static string ReadALine(bool fBlankOkay)
static string ReadAChar(string options)
这些小的实用工具方法协同工作来包装 Console.ReadLine 调用。
ReadALine 接受一个布尔值。如果该值为 true,则在用户按 Enter 键时 ReadALine 将返回。如果该值为 false,则在用户键入至少一个字符并按 Enter 键之前,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 调用,并提供按颜色标记的输出。使用颜色可以轻松跟踪每个消息的所有者。例如,Alice 的消息在全部三个窗口中均显示为绿色。下表列出了示例中使用的颜色及其含义。
ID |
颜色 |
请使用 |
---|---|---|
0 |
红色 |
安全性错误消息。 |
1 |
黄色 |
选项菜单和应用程序消息。 |
2 |
白色 |
Bob 的消息。 |
3 |
青色 |
用户输入。 |
4 |
绿色 |
Alice 的消息。 |
5 |
紫色 |
Mallory 的消息。 |
6 |
黄色 |
应用程序重新启动提示。 |
7 |
灰色 |
加密的消息数据。 |