【IT168 技术文档】
本主题描述了如何使用加密应用程序块来开发应用程序。在“输入配置信息”中,它展示了如何修改应用程序块的配置以执行特定的任务。“关键场景”解释了如何将应用程序块用于特定的场景,例如加密数据。本主题假设使用的是原始的应用程序块,没有扩展它。(要学习如何添加功能,请参见扩展加密应用程序块。)
所有应用程序块都带有源代码,在快速入门和配置工具使用前必须编译。要学习如何编译 Enterprise Library 的源代码,请参见构建 Enterprise Library 。
添加加密应用程序块
配置加密应用程序块
配置定制的哈希提供程序
配置哈希算法提供程序
配置定制对称加密提供程序
配置 DPAPI 对称加密提供程序
配置对称算法提供程序
使用 Cryptographic Key Wizard
使用 Cryptographic Key Wizard ,你可以:
Enterprise Library 使用 DPAPI 来保护密钥。可以使用 Cryptographic Key Wizard 来创建密钥,每个密钥保存在独立的文件中,并使用 DPAPI 保护。当创建密钥时,可以选择机器模式或者用户模式来限制对密钥的访问。
在下列情况下使用机器模式:
如果在共享主机环境中运行应用程序,并确保应用程序的敏感数据对服务器上的其他应用程序来说是不可访问的时使用用户模式。在这种情况下,每个应用程序都将以单独的标识运行,应用程序的资源,如文件和数据库,都限于那个标识。
下面的过程描述了如何使用 Cryptographic Key Wizard。
生成一个新的密钥
使用已存在的受 DPAPI 保护的密钥文件
导入一个受密码保护的密钥文件
使用提示
导入和保存密钥时考虑以下几点:
所有应用程序块都带有源代码,在快速入门和配置工具使用前必须编译。要学习如何编译 Enterprise Library 的源代码,请参见构建 Enterprise Library 。
输入配置信息
这些过程解释了如何配置加密应用程序块。与节点相关的属性显示在右边的面板中。添加加密应用程序块
- 打开配置文件。更多信息,请参见配置应用程序块。
- 右单击应用程序配置,指向 New ,然后单击应用程序块。
- 配置控制台自动添加加密应用程序块节点,以及 HashProviders 和 SymmetricProviders 子节点,并使用了默认配置。
配置加密应用程序块
- (可选的)在右面板中,设置 DefaultHashProvider 属性。在这设置的是,如果应用程序代码没有指定另一个提供程序的话,加密应用程序块将使用的哈希提供程序实例。在下拉列表框中,单击哈希提供程序。默认为无。
- (可选的)在右面板中,设置 DefaultSymmetricCryptoProvider 属性。在此设置的是,如果应用程序代码没有指定另一个提供程序的话,加密应用程序块将使用的对称加密提供程序的实例。在下拉列表框中,单击对称提供程序。默认为无。
配置定制的哈希提供程序
- 单击 Hash Providers ,指向 New ,然后单击 CustomHashProvider 。
- 在右面板中的 Attributes 属性中,单击省略号按钮(...)。
- 在 EditableKeyValueCollectionEditor 对话框中,单击 Add 来添加一个新的名称/值对。
- 在 EditableKeyValueCollectionEditor 对话框的右面板中,输入键的名称和属性的值。
- 按上列方法添加多个名称/值对,然后单击 OK 。
- (可选的)在配置控制台右面板中的 Name 属性节中,修改定制哈希提供程序的名称,默认的名称是 CustomHash Provider 。
- 在右面板的 Type 属性节中,单击省略号按钮(...)。如果程序集文件夹中没有想要的类型,在 TypeSelector 中单击 LoadAssembly,以查找包含想要的类型的程序集。
配置哈希算法提供程序
- 单击 Hash Providers ,指向 New ,然后单击 HashAlgorithmProvider 。
- 在 TypeSelector 对话框中,选择要使用的哈希算法提供程序。如果哈希提供程序没有包含在内,在 TypeSelector 中单击 LoadAssembly 以查找包含想要的类型的程序集。
- (可选的)在配置控制台右面板中的 Name 属性节中,修改哈希算法提供程序的名称,默认的名称是在第2步中选择的类型的名称。
- 设置 SaltEnabled 属性。在下拉列表中,单击 True 或 False 。默认为 False 。
注意:Cryptographic Key Wizard 会因为哈希算法提供程序被密钥化了而出现。关于生成和导入密钥的过程,请参见使用 Cryptographic Key Wizard 。
配置定制对称加密提供程序
- 单击 Symmetric Providers ,指向 New ,然后单击 CustomSymmetric CryptographyProvider 。
- 在右面板中的 Attributes 属性节中,单击省略号按钮(...)。
- 在 EditableKeyValueCollectionEditor 对话框中,单击 Add 以添加一个新的名称/值对。
- 在 EditableKeyValueCollectionEditor 对话框的右面板中,输入密钥名称和属性的值。
- 按以上方法添加更多的名称/值对,然后单击 OK 。
- (可选的)在配置控制台的右面板中的 Name 属性节中,修改定制对称加密提供程序的名称。默认的名称为 CustomHash Provider 。
- 在右面板的 Type 属性节中,单击省略号按钮(...)。如果程序集文件夹中没有想要的类型,在 TypeSelector 中单击 LoadAssembly,以查找包含想要的类型的程序集。
配置 DPAPI 对称加密提供程序
- 单击 Symmetric Providers ,指向 New ,然后单击 DPAPISymmetric CryptographyProvider 。
- (可选的)在配置控制台的右面板中的 Name 属性节中,修改 DPAPI 对称加密提供程序的名称。默认名称为 DPAPI Symmetric CryptographyProvider 。
- 设置 ProtectionScope 属性。在下拉列表中,选择 CurrentUser 或 LocalMachine 。
CurrentUser 值的意思是 DPAPI 使用本地用户的配置信息来生成密钥。只有特定用户的账户可以解密已加密的数据。LocalMachine 值的意思是任何运行在机器上的代码都可以访问受保护的密钥;因此,它可以解密任何在 LocalMachine 模式下加密的秘密。要消除这个问题,应用程序代码可以在调用 Encrypt 或 Decrypt 方法时传递一个熵值。熵使得运行在同一台计算机上的一个应用程序难于危害另一应用程序的加密密钥。然而,必须要保护好熵值。如果只是简单的将它保存在不受保护的文件中,攻击者可以访问文件,获取熵值,然后使用它来解密应用程序的数据。应用程序块的配置不包括熵值,这就意味着不能用配置控制台来生成或保存熵值。
配置对称算法提供程序
- 单击 Symmetric Providers ,指向 New ,然后单击 Symmetric AlgorithmProvider 。
- 在 TypeSelector 中,选择要使用的对称算法提供程序。如果没有包含提供程序,单击 TypeSelector 中的 LoadAssembly 来查找包含想要的类型的程序集。默认类型是 RijndaelMananged 。
- 使用 CryptographicKeyWizard 可以导入或生成密钥。更多信息,请参见使用 Cryptographic Key Wizard 。
使用 Cryptographic Key Wizard
使用 Cryptographic Key Wizard ,你可以:
- 创建新的密钥。
- 使用已存在的 DPAPI 保护的密钥文件。
- 导入密码保存的密钥文件。
Enterprise Library 使用 DPAPI 来保护密钥。可以使用 Cryptographic Key Wizard 来创建密钥,每个密钥保存在独立的文件中,并使用 DPAPI 保护。当创建密钥时,可以选择机器模式或者用户模式来限制对密钥的访问。
在下列情况下使用机器模式:
- 应用程序运行在自己专用的服务器,服务器上没有其他应用程序。
- 多个应用程序运行在同一服务器上,这些应用程序能够共享敏感信息。
如果在共享主机环境中运行应用程序,并确保应用程序的敏感数据对服务器上的其他应用程序来说是不可访问的时使用用户模式。在这种情况下,每个应用程序都将以单独的标识运行,应用程序的资源,如文件和数据库,都限于那个标识。
注意:如果在机器模式下使用 DPAPI ,加密的字符串将专用于特定的机器,所以必须在每个机器上生成加密的数据。不要在服务器农场或集群中的服务器间复制加密的数据。
下面的过程描述了如何使用 Cryptographic Key Wizard。
生成一个新的密钥
- 选择 Create a new key ,然后单击 Next 。
- 输入要使用的十六进制密钥或者单击 Generate 生成一个新的密钥。单击 Next 。
- 选择要保存密钥文件的位置。输入位置或者单击省略按钮(...)并选择位置。单击 Next 。
- 选择 Usermode 或者 Machinemode。用户模式使用当前登录的用户的证书加密密钥。在机器模式中,任何登录的用户都可以加密和解密密钥。单击 Finish 。
- Key 属性将出现在配置控制台的右面板中。单击省略号按钮(...)可再次使用 Cryptographic Key Wizard 生成一个不同的密钥。
使用已存在的受 DPAPI 保护的密钥文件
- 选择 Use an existing DPAPI-protected key file,然后单击 Next 。
- 输入密钥文件的位置。文件必须包含与所使用的同样的算法类型相关联的密钥。例如,如果配置了 RijndaelManaged 类型的算法,导入的密钥也就必须与 RijndaelManaged 类型算法相关联。更多信息,请参见使用提示。输入位置或者单击省略号按钮(...)并选择位置。单击 Next 。
- 选择 Usermode 或 Machinemode 之一。用户模式使用当前登录的用户的证书加密密钥。在机器模式中,任何登录的用户都可以加密和解密密钥。单击 Finish 。
- Key 属性将出现在配置控制台的右面板中。单击省略号按钮(...)可再次使用 Cryptographic Key Wizard 生成一个不同的密钥。
导入一个受密码保护的密钥文件
- 选择 Import a password-protected key file,然后单击 Next 。
- 输 入密钥文件的位置。输入位置或者单击省略号按钮(...)并选择位置。文件必须包含与当前所使用的同样的算法类型相关联的密钥。例如,如果配置了 RijndaelManaged 类型的算法,导入的密钥也就必须与 RijndaelManaged 类型算法相关联。更多信息,请参见使用提示。输入用于加密文件的密码。单击 Next 。
- 选择 Usermode 或 Machinemode 之一。用户模式使用当前登录的用户的证书加密密钥。在机器模式中,任何登录的用户都可以加密和解密密钥。单击 Finish 。
- Key 属性将出现在配置控制台的右面板中。单击省略号按钮(...)可再次使用 Cryptographic Key Wizard 生成一个不同的密钥。
使用提示
导入和保存密钥时考虑以下几点:
- 在为算法导入密钥时,必须选择为同样算法类型导出的密钥文件。如果选择了一个其他算法类型的密钥,在应用程序运行时将会出现异常。
- 配置控制台在配置源的 节中保存每个密钥文件的绝对路径。例如,在使用默认的配置源时,应用程序配置文件包含了密钥文件的绝对路径。如果在另一台计算机中部署应用程序,必须复制密钥文件到同样的绝对路径,或者更新计算机的配置源中的 节以反映新的位置。