[EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...
? 在完成了后,今天開始介紹企業(yè)庫中的新模塊:Cryptographer(加密模塊),這個(gè)模塊在日常的大多數(shù)項(xiàng)目的作用非常重要,例如:網(wǎng)站會(huì)員密碼、身份證號(hào)、網(wǎng)站配置等,通過對(duì)信息進(jìn)行加密可以保證項(xiàng)目數(shù)據(jù)的安全性。
今天主要介紹以下幾點(diǎn):
1、企業(yè)庫Cryptographer(加密模塊)簡單分析。
2、實(shí)現(xiàn)一個(gè)自定義加密接口。
3、在項(xiàng)目中應(yīng)用自定義接口。
?
第一點(diǎn)、企業(yè)庫Cryptographer(加密模塊)簡單分析
在我們?nèi)粘i_發(fā)中總會(huì)使用加密對(duì)數(shù)據(jù)進(jìn)行加密,我們一般都會(huì)在項(xiàng)目中自定義一些加密方法,而企業(yè)庫就是為了簡便這些開發(fā),提供了簡便的方式來進(jìn)行數(shù)據(jù)加密解密。
和其他的模塊一樣,Cryptographer(加密模塊)也可以通過簡單的配置進(jìn)行數(shù)據(jù)加密解密,具體有關(guān)配置方面的介紹可以看園子里huangcong所寫的文章,我就不多介紹了:
Cryptography Application Block (初級(jí))
Cryptography Application Block (高級(jí))
Cryptographer(加密模塊)主要提供2種加密方式:
1、HashCryptographer(離散加密),這種方法根據(jù)特定的算法對(duì)數(shù)據(jù)進(jìn)行加密,此種加密無法被解密。
2、SymmetricCryptographer(對(duì)稱性加密),這種方法也是根據(jù)特定的算法對(duì)數(shù)據(jù)進(jìn)行加密,但是數(shù)據(jù)加密后可以進(jìn)行解密。
通過圖可以更好的理解,下圖引用自企業(yè)庫5.0文檔:
加密模塊中靜態(tài)類Cryptographer為核心,方便程序員根據(jù)配置對(duì)數(shù)據(jù)進(jìn)行加密解密,其主要包含以下成員:
1、方法CreateHash,根據(jù)配置文件中所配置的離散配置名讀取配置對(duì)數(shù)據(jù)進(jìn)行加密。
2、方法EncryptSymmetric,根據(jù)配置文件中所配置的對(duì)稱性配置名讀取配置對(duì)數(shù)據(jù)進(jìn)行加密。
3、方法DecryptSymmetric,根據(jù)配置文件中所配置的對(duì)稱性配置名讀取配置對(duì)數(shù)據(jù)進(jìn)行解密。
4、方法CompareHash,比較帶加密的數(shù)據(jù)和已加密的數(shù)據(jù)是否一致。
5、私有方法GetHashProvider、GetSymmetricCryptoProvider,根據(jù)配置文件名獲取離散加密、對(duì)稱加密實(shí)例。
在這個(gè)加密模塊中,靜態(tài)類Cryptographer為我們提供了根據(jù)配置名進(jìn)行加密解密方式,同時(shí)還提供了一個(gè)抽象類CryptographyManager來實(shí)現(xiàn)自定義的加密解密管理器,在加密模塊中已經(jīng)為我們提供了一個(gè)CryptographyManager的實(shí)現(xiàn)——CryptographyManagerImpl。
抽象類CryptographyManager本質(zhì)上就是一個(gè)非靜態(tài)的Cryptography,其定義了4個(gè)抽象方法:
1、方法CreateHash。
2、方法EncryptSymmetric。
3、方法DecryptSymmetric。
4、方法CompareHash。
實(shí)現(xiàn)類CryptographyManagerImpl則主要實(shí)現(xiàn)了抽象類CryptographyManager,其主要信息如下:
1、字段IDictionary<string, IHashProvider> hashProviders,離散加密鍵值對(duì)集合,包含了多個(gè)離散加密實(shí)現(xiàn)。
2、字段IDictionary<string, ISymmetricCryptoProvider> symmetricCryptoProviders,對(duì)稱加密鍵值對(duì)集合,包含了多個(gè)對(duì)稱加密實(shí)現(xiàn)。
3、字段IDefaultCryptographyInstrumentationProvider instrumentationProvider,提供加密模塊出現(xiàn)錯(cuò)誤報(bào)告
4、構(gòu)造函數(shù),一共有3個(gè)構(gòu)造函數(shù),接收泛型列表形式的離散加密實(shí)現(xiàn)、對(duì)稱加密實(shí)現(xiàn)以及
5、加密解密方法CreateHash、EncryptSymmetric、DecryptSymmetric,這3個(gè)方法接收3個(gè)參數(shù):所配置的加密解密實(shí)例名、待加密數(shù)據(jù)和加密模塊的錯(cuò)誤報(bào)告(IDefaultCryptographyInstrumentationProvider)。
其內(nèi)部會(huì)根據(jù)實(shí)例名到hashProviders或symmetricCryptoProviders這2個(gè)列表中尋找相應(yīng)的加密解密實(shí)現(xiàn),然后調(diào)用實(shí)現(xiàn)進(jìn)行加密解密。
?
?
在實(shí)際的項(xiàng)目開發(fā)的開發(fā)過程中,我們既可以通過靜態(tài)類Cryptographer簡單的完成對(duì)數(shù)據(jù)的加密解密,也可以通過實(shí)現(xiàn)抽象類CryptographyManager來編寫符合項(xiàng)目需求的加密解密管理器,總的來說企業(yè)庫的這個(gè)Cryptographer模塊已經(jīng)為我們提供了很好的加密解密封裝,同時(shí)又提供了擴(kuò)展接口在其基礎(chǔ)上可以進(jìn)行進(jìn)一步擴(kuò)展,大大方便了我們的日常項(xiàng)目開發(fā)。
?
第二點(diǎn):實(shí)現(xiàn)一個(gè)自定義加密接口
在第一點(diǎn)中,我簡單介紹了企業(yè)庫Cryptographer模塊的重要信息,現(xiàn)在我來介紹下企業(yè)庫Cryptographer模塊為我們提供的加密解密擴(kuò)展接口。
上面說過,企業(yè)庫Cryptographer模塊提供了2種加密解密方式:
1、HashCryptographer(離散加密),這種方法根據(jù)特定的算法對(duì)數(shù)據(jù)進(jìn)行加密,此種加密無法被解密。
2、SymmetricCryptographer(對(duì)稱性加密),這種方法也是根據(jù)特定的算法對(duì)數(shù)據(jù)進(jìn)行加密,但是數(shù)據(jù)加密后可以進(jìn)行解密。
這2種加密解密方式對(duì)應(yīng)著2個(gè)接口:IHashProvider和ISymmetricCryptoProvider,分別看下這2個(gè)接口的代碼:
IHashProvider接口:
| 1 2 3 4 5 6 | public?interface?IHashProvider { ????byte[] CreateHash(byte[] plaintext); ????bool?CompareHash(byte[] plaintext, byte[] hashedtext); } |
這個(gè)接口只有2個(gè)方法:
1、方法CreateHash,接收傳入的待加密數(shù)據(jù)(字節(jié)數(shù)組)根據(jù)具體實(shí)現(xiàn)進(jìn)行離散加密返回加密后的數(shù)據(jù)(字節(jié)數(shù)組)。
2、方法CompareHash,接收待加密數(shù)據(jù)(字節(jié)數(shù)組)和已經(jīng)加密后的數(shù)據(jù)(字節(jié)數(shù)組),調(diào)用具體實(shí)現(xiàn)的離散加密方法將待加密數(shù)據(jù)進(jìn)行加密然后與已加密數(shù)據(jù)進(jìn)行比較,看其是否相等。
?
ISymmetricCryptoProvider接口:
| 1 2 3 4 5 6 | public?interface?ISymmetricCryptoProvider { ????byte[] Encrypt(byte[] plaintext); ????byte[] Decrypt(byte[] ciphertext); } |
這個(gè)接口也比較簡單,也只有2個(gè)方法:
1、方法Encrypt,接收待加密數(shù)據(jù)(字節(jié)數(shù)組),調(diào)用實(shí)現(xiàn)方法進(jìn)行加密,返回加密后的數(shù)據(jù)(字節(jié)數(shù)組)。
2、方法Decrypt,接收已加密數(shù)據(jù)(字節(jié)數(shù)組),調(diào)用實(shí)現(xiàn)方法進(jìn)行解密,返回解密后的數(shù)據(jù)(字節(jié)數(shù)組)。
而如果我們需要擴(kuò)展自定的加密解密方法據(jù)需要從上面2個(gè)接口入手,根據(jù)需求判斷是要進(jìn)行離散加密還是對(duì)稱性加密實(shí)現(xiàn)不同的接口。
?
以上就是今天所要介紹的企業(yè)庫Cryptographer模塊信息,主要介紹了Cryptographer模塊的常用類、加密解密管理器,同時(shí)簡單介紹了Cryptographer模塊的加密解密擴(kuò)展接口。
在下一篇文章中我將繼續(xù)介紹如何實(shí)現(xiàn)自定義離散加密和對(duì)稱性加密方法,以及在項(xiàng)目中使用自定義的加密解密方法。
?
微軟企業(yè)庫5.0 學(xué)習(xí)之路系列文章索引:
第一步、基本入門
第二步、使用VS2010+Data Access模塊建立多數(shù)據(jù)庫項(xiàng)目
第三步、為項(xiàng)目加上異常處理(采用自定義擴(kuò)展方式記錄到數(shù)據(jù)庫中)?
第四步、使用緩存提高網(wǎng)站的性能(EntLib Caching)
第五步、介紹EntLib.Validation模塊信息、驗(yàn)證器的實(shí)現(xiàn)層級(jí)及內(nèi)置的各種驗(yàn)證器的使用方法——上篇
第五步、介紹EntLib.Validation模塊信息、驗(yàn)證器的實(shí)現(xiàn)層級(jí)及內(nèi)置的各種驗(yàn)證器的使用方法——中篇?
第五步、介紹EntLib.Validation模塊信息、驗(yàn)證器的實(shí)現(xiàn)層級(jí)及內(nèi)置的各種驗(yàn)證器的使用方法——下篇
第六步、使用Validation模塊進(jìn)行服務(wù)器端數(shù)據(jù)驗(yàn)證
第七步、Cryptographer加密模塊簡單分析、自定義加密接口及使用—上篇
第七步、Cryptographer加密模塊簡單分析、自定義加密接口及使用—下篇
第八步、使用Configuration Setting模塊等多種方式分類管理企業(yè)庫配置信息
第九步、使用PolicyInjection模塊進(jìn)行AOP—PART1——基本使用介紹
第九步、使用PolicyInjection模塊進(jìn)行AOP—PART2——自定義Matching Rule
第九步、使用PolicyInjection模塊進(jìn)行AOP—PART3——內(nèi)置Call Handler介紹
第九步、使用PolicyInjection模塊進(jìn)行AOP—PART4——建立自定義Call Handler實(shí)現(xiàn)用戶操作日志記錄
第十步、使用Unity解耦你的系統(tǒng)—PART1——為什么要使用Unity?
第十步、使用Unity解耦你的系統(tǒng)—PART2——了解Unity的使用方法(1)
第十步、使用Unity解耦你的系統(tǒng)—PART2——了解Unity的使用方法(2)
第十步、使用Unity解耦你的系統(tǒng)—PART2——了解Unity的使用方法(3)
第十步、使用Unity解耦你的系統(tǒng)—PART3——依賴注入
第十步、使用Unity解耦你的系統(tǒng)—PART4——Unity&PIAB
擴(kuò)展學(xué)習(xí):
擴(kuò)展學(xué)習(xí)篇、庫中的依賴關(guān)系注入(重構(gòu) Microsoft Enterprise Library)[轉(zhuǎn)]
本文轉(zhuǎn)自kyo-yo博客園博客,原文鏈接:http://www.cnblogs.com/kyo-yo/archive/2010/08/09/Learning-EntLib-Seventh-Introduce-Cryptographer-and-Expand.html,如需轉(zhuǎn)載請自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的[EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中os与sys两模块的区别
- 下一篇: 46. Ext中namespace的作用