Enterprise Library 扩展和修改加密应用程序块

此文档维护在: http://wiki.entlib.net.cn/EntlibHelp31CryptographyApplicationBlock.ashx

在它的原始状态中,加密应用程序块能很好的用于典型的加密场景。然而,许多时候都不得不定制某些加密应用程序块的行为以更好的适应应用程序的特定需求。有二种方法可以定制应用程序块,扩展和修改。

扩展加密应用程序块

通过指定的扩展点扩展加密应用程序块。典型的,这些扩展点是由你编写的自定义的类,这些类实现了特定接口或者从一个抽象类中派生。因为这些定制的类已存在于应用程序的空间中,所以不需要修改或重建应用程序块。另一种选择是,使用配置设置指定扩展。

现 在,可以创建新的、那些由应用程序块提供的提供程序之外的加密提供程序来扩展应用程序块。要这样做,实现包含在应用程序块中的接口。为了帮助你使用定制的 提供程序,可以使用 Enterprise Library 配置控制台来指定定制的哈希和对称提供程序。更详细的信息,请参见扩展加密应用程序块。

修改加密应用程序块

修改加密应用程序块要对应用程序块的源代码进行修改。这些修改可能或不可能需要相关配置的改变。因为是对源代码的修改,所以在修改起作用之前必须重建应用程序块。还必须准备处理支持和版本问题。要学习更多的信息,请参见修改加密应用程序块。

扩展加密应用程序块

加密应用程序块为用于不同的应用程序和成为通用应用程序块而设计。扩展点让你适配应用程序块以满足任何特定应用程序的需要。可以添加自定义的加密提供程序来扩展应用程序块的功能。典型的,这些自定义的提供程序是第三方的加密提供程序。

扩展加密应用程序块

  1. 创建新的自定义类并添加它到项目中。
  2. 确认类实现了要求的接口、构造函数和方法。
  3. 在 Enterprise Library 控制台中创建一个通用对象。
  4. 指定自定义类的类型名。
  5. 个性对象的属性能指定任何自定义的配置属性。

创建自定义的哈希算法提供程序

1.创建一个新类,然后添加它到项目中。
2.(可选的) 要不带完整的精确的元素引用使用来自加密应用程序块的元素,可以添加下列的 using 语句(C#)或者 Imports 语句(Visual Basic)到源代码文件的顶部。
C#
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration;
Visual Basic
Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration
Imports Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
Imports Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration

注意:对于 Visual Basic 项目,可以使用项目设计器的引用页来管理引用和导入命名空间。要访问引用页,在解决方案浏览器中选择项目节点,在 项目菜单中单击 属性。在项目设计器出现时,单击 引用标签。

3.指定类实现 IHashProvider
4.添加类的属性 ConfigurationElementType,指定属性的参数为 CustomHashProviderData 的类型。
C#
[ConfigurationElementType(typeof(CustomHashProviderData))]
public class MyHashProvider : IHashProvider
Visual Basic
<ConfigurationElementType(GetType(CustomHashProviderData))> _
Public Class MyHashProvider: Implements IHashProvider

5.添加拥有 NameValueCollection 类型的参数的构造函数。
C#
public MyHashProvider(NameValueCollection attributes)
{
}
Visual Basic
Public Sub New(ByVal attributes As NameValueCollection)

End Sub

6.添加 CreateHashCompareHash 方法到类中,然后实现需要的行为。
C#
public byte[] CreateHash(byte[] plaintext)
{
}
public bool CompareHash(byte[] plaintext, byte[] hashedtext)
{
}
Visual Basic
Public Function CreateHash(ByVal plaintext As Byte()) As Byte() 
End Function
Public Function CompareHash(ByVal plaintext As Byte(), ByVal hashedtext As Byte()) As Boolean
End Function

创建自定义对称加密算法提供程序
1.创建一个新的类,然后添加它到项目中。
2.(可选的) 要不带完整的精确的元素引用使用来自加密应用程序块的元素,可以添加下列的 using 语句(C#)或者 Imports 语句(Visual Basic)到源代码文件的顶部。
C#
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration;
Visual Basic
Imports Microsoft.Practices.EnterpriseLibrary.Common.Configuration
Imports Microsoft.Practices.EnterpriseLibrary.Security.Cryptography
Imports Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration

注意:对于 Visual Basic 项目,可以使用项目设计器的引用页来管理引用和导入命名空间。要访问引用页,在解决方案浏览器中选择项目节点,在 项目菜单中单击 属性。在项目设计器出现时,单击 引用标签。

3.指定类实现 ISymmetricCryptoProvider
4.添加类属性 ConfigurationElementType,指定 CustomSymmetricCryptoProviderData 的类型为属性的参数。
C#
[ConfigurationElementType(typeof(CustomSymmetricCryptoProviderData))]
public class MyCustomEncryptionProvider : ISymmetricCryptoProvider
Visual Basic
<ConfigurationElementType(GetType(CustomSymmetricCryptoProviderData))> _
Public Class MyCustomEncryptionProvider: Implements ISymmetricCryptoProvider

5.添加以 NameValueCollection 为参数的构造函数。
C#
public MockCustomSymmetricProvider(NameValueCollection attributes)
{
}
Visual Basic
Public Sub New(ByVal attributes As NameValueCollection)

End Sub

6. 添加 EncryptDecrypt 方法到类中,并实现需要的行为。
C#
public byte[] Encrypt(byte[] plaintext)
{
}

public byte[] Decrypt(byte[] ciphertext)
{
}
Visual Basic
Public Function Encrypt(ByVal plaintext As Byte()) As Byte()
End Function
Public Function Decrypt(ByVal ciphertext As Byte()) As Byte()
End Function

修改加密应用程序块

加密应用程序块为用于不同的应用程序和成为通用应用程序块而设计。扩展点让你适配应用程序块以满足任何特定应用程序的需要。然而,如果要添加新的特性到应用程序块,就要因此而修改源代码(应用程序块包含了源代码和二进制。)

修改加密应用程序块的建议

在修改源代码时,请使用以下最佳实践:
  • 通过阅读文本中的加密应用程序块设计节理解应用程序块是如何工作的。
  • 如果大量修改了代码或者要将应用程序块自定义版本和原始版本一起使用,考虑修改加密应用程序块的命名空间。需要注意的是,改变应用程序块的命名空间要求更新所有其他应用程序块以及使用加密应用程序块的应用程序以适应新的命名空间。
  • 使用强名称。强名称允许程序集被唯一标识、版本化和以及完整性验证。这将不得不生成自己的密钥对以签名应用程序块的修改版本。更多信息,请参见强命名程序集和版本手册。另一种选择是,可以选择不签名定制的版本,而是做为弱命名来引用。
  • 为了使修改起作用,必须重新编译代码。打开加密应用程序块的 Visual Studio 解决方案文件,然后重建整个解决方案。

修改密钥管理代码

Enterprise Library 实现了基于 DPAPI 的方法来进行密钥管理。可以使用此实现,或者根据它的模型适配代码以满足组织的密钥管理需求。使用下列指南来修改应用程序块源代码以实现自定义的密钥管理解决方案:
  • 修改 KeyManager 类。应用程序块运行时使用 KeyManager 类来读取和写入密钥。此类放置在 Security.Cryptography 项目中。
  • 修改或替换 Cryptographic Key Wizard 的源代码。此向导是应用程序块设计时组件的一部分。可以在 Security.Cryptography.Configuration.Design 项目中找到用于向导的源代码。
  • 修改运行加密密钥向导的设计时源代码。配置控制台在添加加密的哈希算法提供程序或者添加一个对称算法提供程序到应用程序配置中时运行此向导。可以在 AddHashAlgorithmProviderNodeCommand 类和 AddSymmetricAlgorithmProviderNodeCommand 类中找到运行向导的代码。可以在 Security.Cryptography.Configuration.Design 项目中找到这些类的源代码。

更多信息

相关信息,请参见下列资源:

转载于:https://www.cnblogs.com/doriandeng/archive/2007/11/13/958498.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值