Enterprise Library 加密应用程序块快速入门
本文维护在:http://wiki.entlib.net.cn/EntlibHelp31CryptographyApplicationBlock.ashx
Enterprise Library 快速入门是简单的、易于理解的应用程序块关键特性的示例,使用了一个实现了常规场景的漫游集合来说明这些特性。
如果要理解一个应用程序块,快速入门将是理想的起始点,并且用试验源代码来学习新的技术也是非常舒服的。如果已对 .NET 框架比较熟悉,以及如果要查看简单的、有助于理解如何解决特定问题的代码示例的话,它们将是非常好的资源。
要使用快速入门的所有优点的话,将需要熟悉面向对象编程相关的概念和技术。
加密快速入门
加密应用程序块快速入门示范了如下场景:- 加密秘密
- 解密秘密
- 从文本中获取一个哈希
- 检查哈希是否与某些文本匹配
系统需求
要构建和运行快速入门,需要下列东东:
- Microsoft Windows 2000, Windows XP Professional, 或者 Windows Server 2003 操作系统
- Microsoft .NET Framework, version 2.0 或者 3.0
- Microsoft Visual Studio 2005 开发系统
快速入门在构建和运行应用程序之前不需要执行任何安装步骤。
构建快速入门
快速入门是源代码形式的,这意味着在运行它之前必须编译它。可以使用 Visual Studio 来构建快速入门。
构建快速入门
- 确认已安装 Enterprise Library 内核
- 从 Winidows 资源管理器中打开 Enterprise Library 源代码,或者从开始菜单快捷方式中:在任务栏上,单击开始,指向程序,指向 Microsoft patterns and practices,指向 Enterprise Library 3.1 – May 2007 ,然后选择 Enterprise Library 3.1 Source Folder。
- 打开 QuickStarts 文件夹,然后是 Cryptography ,再然后是 CS(用于C#)或者 VB (用于 Visual Basic .NET)。
- 双击 CryptographyQuickStart.sln 图标。
- Visual Studio 打开并显示解决方案文件。在菜单中,单击 生成。
- 单击 重新生成解决方案。默认情况下,这是一个 debug 构建。
- 按下 F5 运行快速入门。
快速入门的配置
在加密快速入门的漫游中带有一个默认的配置,它包含在 App.config 文件中。此文件和快速入门项目文件在同一目录中。
要修改或查看这些设置,使用 Enterprise Library 配置控制台打开在包含快速入门项目文件的目录中的 App.config 文件。App.config 文件包含了配置数据。
每次构建代码时,Visual Studio 都为项目复制 App.config 文件到输出目录(创建快速入门可执行文件的目录),并更名为 CryptographyQuickStart.exe.config 。
这 意味着如果要使用配置控制台修改任何配置设置,如加密密钥,以及要重建解决方案,都必须打开放置在快速入门源代码目录中的 App.config 文件来修改配置。也可以使用 Enterprise Library 配置控制台打开 CryptographyQuickStart.exe.config 来修改应用程序的配置。然而,这些修改将在下一次成功构建时被覆盖。加密快速入门包含了下列的默认配置:
- Hash 提供程序:
Name: hash provider
Type: SHA1Managed
SaltEnabled: True
- 对称提供程序
Name: symprovider
Type: Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.SymmetricAlgorithmProvider
algorithmType: RijndaelManaged
protectedKeyFilename: <installdir>"QuickStarts"Cryptography"SymmetricKeyFile.txt
注意:快速入门的方法 CreateKeys 生成一个密钥并将它保存在此文件中。
protectedKeyProtectionScope: LocalMachine
漫游:加密秘密
此漫游示范了如何使用加密应用程序块加密一些文本。重建示例
1.声明适当的变量和常量。
C#
const string symmProvider = "symprovider";
string stringToEncrypt;
string encryptedContentsBase64;
Visual Basic
Const symmProvider As String = "symprovider"
Dim stringToEncrypt As String
Dim encryptedContentsBase64 As String
2.从用户处获取文本
C#
stringToEncrypt = "Sample text";
Visual Basic
stringToEncrypt = "Sample text"
3.调用 Cryptographer 类的静态方法 EncryptSymmetric 完成加密,方法支持配置的的对称提供程序名称的使用。
C#
encryptedContentsBase64 = Cryptographer.EncryptSymmetric(symmProvider, stringToEncrypt);
Visual Basic
encryptedContentsBase64 = Cryptographer.EncryptSymmetric(symmProvider, stringToEncrypt)
漫游:解密秘密
此漫游示范了如何使用加密应用程序块解密文本。重建示例
1.声明适当的变量和常量。
C#
const string symmProvider = "symprovider";
string encryptedContentsBase64;
Visual Basic
Const symmProvider As String = "symprovider"
Dim encryptedContentsBase64 As String
2.调用 Cryptographer 类的静态方法 DecryptSymmetric 来完成解密,方法支持配置的对称提供程序名称的使用。下列代码假设成员变量 encryptedContents 包含使用同样的对称提供程序加密的字符串。
C#
string decryptedContents = Cryptographer.DecryptSymmetric(symmProvider, encryptedContentsBase64);
Visual Basic
Dim decryptedContents As String = Cryptographer.DecryptSymmetric(symmProvider, encryptedContentsBase64)
漫游:从数据中获取哈希
此漫游示范了如何使用加密应用程序块从一些文本中获取哈希。重建示例
1.声明适当的变量和常量。
C#
private const string hashProvider = "hashprovider";
private string stringForHash;
private byte[] generatedHash;
Visual Basic
Const hashProvider As String = "hashprovider"
Dim stringForHash As String
Dim generatedHash As Byte()
2.从用户处获取数据。
C#
byte[] plainText = Encoding.UTF8.GetBytes("password");
Visual Basic
Dim valueToHash As Byte() = Encoding.UTF8.GetBytes("password")
3.调用 Cryptographer 类的静态方法 CreateHash 来获取哈希,方法支持配置的哈希提供程序名称的使用。
C#
generatedHash = Cryptographer.CreateHash(hashProvider, valueToHash);
Visual Basic
generatedHash = Cryptographer.CreateHash(hashProvider, valueToHash)
漫游:验证哈希值是否匹配某些文本
此漫游示范了如何使用加密应用程序块验证以前生成的哈希是否匹配一些文本的哈希。重建示例
1.声明合适的变量和常量
C#
const string hashProvider = "hashprovider";
byte[] generatedHash;
Visual Basic
Const hashProvider As String = "hashprovider"
Dim generatedHash As Byte()
2.从用户处获得文本
C#
byte[] plainText = Encoding.UTF8.GetBytes("password");
Visual Basic
Dim valueToHash As Byte() = Encoding.UTF8.GetBytes("password")
3.调用 Cryptographer 类的静态方法 CompareHash 来获取哈希,支持配置的哈希提供程序的名称的使用。此代码假设成员变量 generatedHash 包含以前为一些文本生成的哈希。
C#
bool comparisonSucceeded = Cryptographer.CompareHash(hashProvider, valueToHash, generatedHash);
Visual Basic
Dim comparisonSucceeded As Boolean = Cryptographer.CompareHash(hashProvider, valueToHash, generatedHash)