如何:生成并运行 CNG 示例
本主题讲述下一代加密技术 (CNG) 安全通信示例的文件结构,并说明如何生成并运行此示例。
为了生成 CNG 示例,您创建三个控制台可执行文件。您同时运行这些可执行文件,以查看此交互式复合示例。
此 CNG 示例是用 C# 编写的。它要求使用 Visual Studio 2008 或更高版本。
生成示例
此 CNG 示例由三个 Visual Studio 项目组成:
Alice
Bob
Mallory
该示例包含六个文件,可以从以下主题查看和复制这些文件:
每个项目都有其自己的 .cs 文件(Alice.cs、Bob.cs 和 Mallory.cs),该文件包含特定于项目的代码。这三个项目共享 Utilities.cs、ChannelManager.cs 和 Communicator.cs 文件。这三个文件直接添加到 Alice 项目,并间接(通过文件链接)添加到 Bob 和 Mallory 项目。
生成 Alice、Bob 和 Mallory 项目
启动 Visual Studio。
在**“文件”菜单上指向“新建”,再单击“项目”**。
此时将出现**“新建项目”**对话框。
在**“项目类型”窗格中,单击“Visual C#”**。
在**“模板”窗格中单击“控制台应用程序”**。
在**“名称”**框中键入 Alice。
在**“位置”**框中输入存储 Alice 项目的位置。
单击**“确定”**。
将 Alice 源代码复制到名为 Alice.cs 的文件,并将该文件保存到 Alice 项目目录。收到提示后,请确认您希望替换默认的 Alice.cs 文件。
将 ChannelManager、Communicator 和 Utilities 源代码分别复制到名为 ChannelManager.cs、Communicator.cs 和 Utilities.cs 的文件中,并将这些文件保存到 Alice 项目目录。按照如下所述将这三个文件添加到 Alice 项目:
在**“视图”菜单上,单击“解决方案资源管理器”**。
在“解决方案资源管理器”窗口中,右击**“Alice”文件夹,指向“添加”,然后单击“现有项”**。
将显示**“添加现有项”**对话框和 Alice 项目目录。
选择 ChannelManager.cs、Communicator.cs 和 Utilities.cs 文件,然后单击**“添加”**。
对 Bob 和 Mallory 项目重复步骤 2-8。请确保将 Bob 源代码保存到 Bob 项目目录,将 Mallory 源代码保存到 Mallory 项目目录。
对 Bob 和 Mallory 项目重复步骤 9。但是,在步骤 9.c 中,不是单击**“添加”,而是单击“添加”按钮旁边的箭头,然后单击“添加为链接”**。
按照如下所述设置 Bob 和 Mallory 项目的输出目录:
在“项目”菜单上,单击**“属性”,然后单击“生成”**选项卡。
将输出路径设置为 Alice 项目使用的生成位置。该位置很可能是在步骤 6 中选择的 Alice 项目目录中的 \bin\Debug\。
若要生成各个项目,请在**“生成”菜单上,单击“生成解决方案”**。
请确认所有项目均成功生成,且可执行文件 Alice.exe、Bob.exe 和 Mallory.exe 存在于 Alice 项目目录中。
运行示例
此示例可以从 Visual Studio 运行,也可以作为独立的应用程序运行。这些方法产生完全相同的输出。
运行 CNG 示例
若要从 Visual Studio 运行此示例,请双击这三个项目的 .sln 文件,即 Alice.sln、Bob.sln 和 Mallory.sln,以打开三个 Visual Studio 实例。在 Alice 项目中,在**“调试”菜单上,单击“开始调试”**。对 Bob 和 Mallory 项目重复此操作。
- 或 -
若要将此示例作为独立的应用程序运行,请将全部三个项目的可执行文件 (.exe) 复制到一个目录中。在 Windows 资源管理器中,双击 Alice.exe。Alice 将通过其内置的自动加载程序调用 Bob 和 Mallory 可执行文件。
备注
也可以从控制台窗口运行 Alice 可执行文件,方法是转到包含这三个可执行文件的目录,并在命令行上输入 alice.exe。
运行这三个可执行文件时,将显示三个控制台窗口。窗口标题反映项目名称,窗口的大小和位置已经过调整,以便于您在 1280 x 1024 显示器上看到消息流。您可以移动这些控制台窗口并重新调整它们的大小以实现最佳显示。
在 Alice 窗口中,当提示选择安全版本时,请键入 1 到 5 之间的某个数。如果是第一次进行测试,请键入 1。
这些数字分别对应于 CNG 示例概述中讨论的五个软件版本。
版本 2 到 5 将询问您是否需要详细输出。如果采用常规模式,请输入 n;如果采用详细模式,请输入 y。
常规模式下仅显示纯文本消息。
详细模式下会显示纯文本消息、数字签名密钥、加密密钥、初始化向量、密码文本和数字签名。
当询问是否禁用 Mallory 时,请键入 n 表示否定,或者键入 y 表示肯定。
如果禁用 Mallory,他将不会接收任何消息并将保持空闲状态。Alice 和 Bob 将在没有 Mallory 截获的情况下进行通信。
理解 Alice 和 Bob 之间的脚本对话。
对话的详细信息取决于您在步骤 2 中选择的版本号。每个窗口都会创建一个发送和接收模式交替的消息循环。发送模式由 :> 提示符指示。接收模式由一个空行指示。如果 Alice 处于发送模式,Bob 将处于接收模式。Bob 接收消息后,即会切换到发送模式,而 Alice 将切换到接收模式。
仔细查看 Alice 和 Bob 的消息。Alice 发送给 Bob 的第二条消息和 Bob 对 Alice 的答复已被 Mallory 更改。
脚本对话结束后,Alice 将询问您是否与 Bob 对话。
如果您想要发送自己的消息,请在提示符处:
键入消息,然后按 Enter。Alice 将发送此消息给 Bob。
将焦点设置到 Bob 窗口,在其中键入一条消息,然后按 Enter。Bob 将发送此消息给 Alice。
重复前面两个步骤来发送其他消息。
如果要退出,请在 Alice 或 Bob 的窗口处于发送模式(由 :> 提示符指示)时在其中按 Enter。
三个窗口将重置为它们在步骤 2 中所处的状态。
备注
如果单击“关闭”按钮来关闭某个窗口,这些窗口可能会停止响应。您将不得不关闭所有打开的窗口,然后重新启动此示例。
使用不同的选项运行此示例。如果选择详细模式和版本 2、3、4 或 5,则可以比较 Alice 发送的加密字符串和 Bob 接收的加密字符串。除非启用了 Mallory,否则它们应完全匹配。但请注意,ASCII 字符集中大于 128 的字符由于无法显示,而由问号 (?) 表示。