[EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...
在完成了后,今天开始介绍企业库中的新模块:Cryptographer(加密模块),这个模块在日常的大多数项目的作用非常重要,例如:网站会员密码、身份证号、网站配置等,通过对信息进行加密可以保证项目数据的安全性。
今天主要介绍以下几点:
1、企业库Cryptographer(加密模块)简单分析。
2、实现一个自定义加密接口。
3、在项目中应用自定义接口。
第一点、企业库Cryptographer(加密模块)简单分析
在我们日常开发中总会使用加密对数据进行加密,我们一般都会在项目中自定义一些加密方法,而企业库就是为了简便这些开发,提供了简便的方式来进行数据加密解密。
和其他的模块一样,Cryptographer(加密模块)也可以通过简单的配置进行数据加密解密,具体有关配置方面的介绍可以看园子里huangcong所写的文章,我就不多介绍了:
Cryptography Application Block (初级)
Cryptography Application Block (高级)
Cryptographer(加密模块)主要提供2种加密方式:
1、HashCryptographer(离散加密),这种方法根据特定的算法对数据进行加密,此种加密无法被解密。
2、SymmetricCryptographer(对称性加密),这种方法也是根据特定的算法对数据进行加密,但是数据加密后可以进行解密。
通过图可以更好的理解,下图引用自企业库5.0文档:
加密模块中静态类Cryptographer为核心,方便程序员根据配置对数据进行加密解密,其主要包含以下成员:
1、方法CreateHash,根据配置文件中所配置的离散配置名读取配置对数据进行加密。
2、方法EncryptSymmetric,根据配置文件中所配置的对称性配置名读取配置对数据进行加密。
3、方法DecryptSymmetric,根据配置文件中所配置的对称性配置名读取配置对数据进行解密。
4、方法CompareHash,比较带加密的数据和已加密的数据是否一致。
5、私有方法GetHashProvider、GetSymmetricCryptoProvider,根据配置文件名获取离散加密、对称加密实例。
在这个加密模块中,静态类Cryptographer为我们提供了根据配置名进行加密解密方式,同时还提供了一个抽象类CryptographyManager来实现自定义的加密解密管理器,在加密模块中已经为我们提供了一个CryptographyManager的实现——CryptographyManagerImpl。
抽象类CryptographyManager本质上就是一个非静态的Cryptography,其定义了4个抽象方法:
1、方法CreateHash。
2、方法EncryptSymmetric。
3、方法DecryptSymmetric。
4、方法CompareHash。
实现类CryptographyManagerImpl则主要实现了抽象类CryptographyManager,其主要信息如下:
1、字段IDictionary<string, IHashProvider> hashProviders,离散加密键值对集合,包含了多个离散加密实现。
2、字段IDictionary<string, ISymmetricCryptoProvider> symmetricCryptoProviders,对称加密键值对集合,包含了多个对称加密实现。
3、字段IDefaultCryptographyInstrumentationProvider instrumentationProvider,提供加密模块出现错误报告
4、构造函数,一共有3个构造函数,接收泛型列表形式的离散加密实现、对称加密实现以及
5、加密解密方法CreateHash、EncryptSymmetric、DecryptSymmetric,这3个方法接收3个参数:所配置的加密解密实例名、待加密数据和加密模块的错误报告(IDefaultCryptographyInstrumentationProvider)。
其内部会根据实例名到hashProviders或symmetricCryptoProviders这2个列表中寻找相应的加密解密实现,然后调用实现进行加密解密。
在实际的项目开发的开发过程中,我们既可以通过静态类Cryptographer简单的完成对数据的加密解密,也可以通过实现抽象类CryptographyManager来编写符合项目需求的加密解密管理器,总的来说企业库的这个Cryptographer模块已经为我们提供了很好的加密解密封装,同时又提供了扩展接口在其基础上可以进行进一步扩展,大大方便了我们的日常项目开发。
第二点:实现一个自定义加密接口
在第一点中,我简单介绍了企业库Cryptographer模块的重要信息,现在我来介绍下企业库Cryptographer模块为我们提供的加密解密扩展接口。
上面说过,企业库Cryptographer模块提供了2种加密解密方式:
1、HashCryptographer(离散加密),这种方法根据特定的算法对数据进行加密,此种加密无法被解密。
2、SymmetricCryptographer(对称性加密),这种方法也是根据特定的算法对数据进行加密,但是数据加密后可以进行解密。
这2种加密解密方式对应着2个接口:IHashProvider和ISymmetricCryptoProvider,分别看下这2个接口的代码:
IHashProvider接口:
1
2
3
4
5
6
|
public interface IHashProvider
{
byte [] CreateHash( byte [] plaintext);
bool CompareHash( byte [] plaintext, byte [] hashedtext);
}
|
这个接口只有2个方法:
1、方法CreateHash,接收传入的待加密数据(字节数组)根据具体实现进行离散加密返回加密后的数据(字节数组)。
2、方法CompareHash,接收待加密数据(字节数组)和已经加密后的数据(字节数组),调用具体实现的离散加密方法将待加密数据进行加密然后与已加密数据进行比较,看其是否相等。
ISymmetricCryptoProvider接口:
1
2
3
4
5
6
|
public interface ISymmetricCryptoProvider
{
byte [] Encrypt( byte [] plaintext);
byte [] Decrypt( byte [] ciphertext);
}
|
这个接口也比较简单,也只有2个方法:
1、方法Encrypt,接收待加密数据(字节数组),调用实现方法进行加密,返回加密后的数据(字节数组)。
2、方法Decrypt,接收已加密数据(字节数组),调用实现方法进行解密,返回解密后的数据(字节数组)。
而如果我们需要扩展自定的加密解密方法据需要从上面2个接口入手,根据需求判断是要进行离散加密还是对称性加密实现不同的接口。
以上就是今天所要介绍的企业库Cryptographer模块信息,主要介绍了Cryptographer模块的常用类、加密解密管理器,同时简单介绍了Cryptographer模块的加密解密扩展接口。
在下一篇文章中我将继续介绍如何实现自定义离散加密和对称性加密方法,以及在项目中使用自定义的加密解密方法。
微软企业库5.0 学习之路系列文章索引:
第一步、基本入门
第二步、使用VS2010+Data Access模块建立多数据库项目
第三步、为项目加上异常处理(采用自定义扩展方式记录到数据库中)
第四步、使用缓存提高网站的性能(EntLib Caching)
第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇
第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
第六步、使用Validation模块进行服务器端数据验证
第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇
第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—下篇
第八步、使用Configuration Setting模块等多种方式分类管理企业库配置信息
第九步、使用PolicyInjection模块进行AOP—PART1——基本使用介绍
第九步、使用PolicyInjection模块进行AOP—PART2——自定义Matching Rule
第九步、使用PolicyInjection模块进行AOP—PART3——内置Call Handler介绍
第九步、使用PolicyInjection模块进行AOP—PART4——建立自定义Call Handler实现用户操作日志记录
第十步、使用Unity解耦你的系统—PART1——为什么要使用Unity?
第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)
第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(2)
第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(3)
第十步、使用Unity解耦你的系统—PART3——依赖注入
第十步、使用Unity解耦你的系统—PART4——Unity&PIAB
扩展学习:
扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]
本文转自kyo-yo博客园博客,原文链接:http://www.cnblogs.com/kyo-yo/archive/2010/08/09/Learning-EntLib-Seventh-Introduce-Cryptographer-and-Expand.html,如需转载请自行联系原作者
[EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...相关推荐
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...
本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
原文地址:http://www.cnblogs.com/kyo-yo/archive/2010/11/01/Learning-EntLib-Tenth-Decoupling-Your-System-U ...
- [EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART5——使用Unity自身的拦截器...
在前一篇文章中,介绍了如何使用Unity来接管PIAB进行拦截操作,而Unity自身也提供了类似于ICallHandler的拦截处理程序--IInterceptionBehavior,今天这篇文章就是 ...
- 微软企业库5.0 学习之路——UnityPIAB 通过配置实现AOP
完全通过配置实现AOP的资料太少了,今天忙了好几个小时终于走通了,分享一下. 模拟业务是:登陆,记录登陆日志. // 业务接口 public interface IStudentManage{bool ...
- 微软企业库5.0学习笔记(三十三)数据访问模块
前言 鉴于企业库5.0已经发布正式版,同时有广大读者的要求(臭屁一下,o(∩_∩)o...),后面文章的内容和代码将基于Enterprise Library5.0和Unity2.0来写,感谢大家的一贯 ...
- 微软企业库5.0学习笔记(四)配置企业库
http://blog.csdn.net/sfbirp/archive/2010/05/18/5603567.aspx 转载于:https://www.cnblogs.com/Rising/archi ...
- 微软企业库4.1学习笔记(三)企业库迁移和并行使用,以及企业库的扩展
一.迁移和并行使用 通常来说,企业库是建立在.NET 2.0 的基础上,使用后续版本的企业库也不需要改变任何代码.不需要将引用更新到新的程序集,也不需要在配置文件中指明程序集的正确版本. 这个版本4. ...
- 微软企业库4.1学习笔记(八)创建对象 续集2
3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要,你可以指定下面的一条或者多条: 你可以在Unity配置中指定想要的BlockExtensions 你可以在Unity配置中 ...
- 微软企业库4.1学习笔记(十)企业库的设计
在设计整个企业库的过程中,使用了一系列的最佳实践.下面列出一些里面的最佳实践: 在核心库中使用了Common模块 使用了统一的命名约定和统一的版本 在设计的过程中使用单元测试 在所有模块中包含基础结构 ...
最新文章
- 产品上线前会发生什么故事? | 每日趣闻
- 一个可以直接使用的可用iptables配置的stateless NAT实现
- 【ArcGIS风暴】实验:公路建设成本的计算
- 中国互联网络发展状况统计报告
- mysql 变量赋值 in_MySQL 存储过程传参数实现where id in(1,2,3,...)实例效果
- git命令——git commit
- Python数据可视化-matplotlib and seaborn
- 云桌面优缺点_云桌面中VDI架构有什么优势和劣势?
- android 文件下载和保存
- 伪装苹果android id,小心了,别被伪造的 iOS 系统弹窗骗走 Apple ID
- Redis读书笔记(一)Redis可以做什么
- 一个应届计算机毕业生的2012求职之路
- 计算机学渣和你说说从毕业到工作
- 静态页面 常见问题 margin-top塌陷、padding把盒子撑大
- HTML2游戏——绿林怪盗
- 解决excel(日期变数字)导入数据库(数字变日期)
- qconf 配置中心 php,QConf
- 【javaEE】网络初识
- 【STM32笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)
- js 数组遍历方法详解(map、filter、find、findIndex、reduce)