Enterprise Library 2.0 -- Cryptography Application Block

转载 2006年06月21日 14:56:00

前言:

    本文包括如下内容:
1、Cryptography Application Block 的简单介绍(参考了自带的英文文档)
2、配置Cryptography Application Block(本文以配置Symmetric Encryption Provider为例,Hash Provider 的配置基本相似)
3、怎样对一个数据进行加密?
4、数据解密
5、如何得到数据的Hash值
6、根据数据Hash值来判断数据是否变化

第一部分:Crytography Application Block 简介

    Crytography Application Block 提供了两种加密方法: Hash 和 Symmetric ,二者的区别是,Hash加密算法是不可以解密的,而Symmetric既可加密又可以解密。当然它也支持自定义的加密方法,Enterprise Library 2.0提供了对加密算法的修改和扩展功能。

    一、什么时候需要使用Cryptography Application Block?
   当我们的应用程序需要用到Hash 或 Symmetric 加密时,我们可以考虑使用它,我们可以使用微软提供的加密算法,也可以自己定义需要的加密算法。当我们的数据只需要对其进行加密,并且不会用到解密方法时,我们可以使用Hash Provider(比如说我们对密码进行加密就可采用此种方法),当数据既需要加密又需要解密的时候,我们可以使用Symmetric Encryption Provider(比如我们在页面间通过Url传递一些敏感参数时可以考虑使用此种方法对数据进行加密)。

   二、Crytography Application Block 给我们开发人员带来了什么好处?

1、它帮助我们开发人员很轻松的解决应用程序中的加密问题。
2、它可以帮助我们统一整个企业的应用程序的统一性。
3、Crytography Application Block是可扩展的,我们可以用自己写的加密算法来对应用程序进行加密。

第二部分:Crytography Application Block 配置

    首先我们打开Enterprise Library Configuration,它存在与你的Enterprise Library安装目录下的bin目录中。当然在此之前我们需要先建好我们的项目,并添加App.Config文件,我后面的例子都是在VS2005的Test Project 中进行的。
    选择 File --> Open Application ,如下:

此时选择我们刚建的项目中的App.Config文件,如图:


然后,右键单击 Application --> New --> Crytography Application Block,如图:


因为我们要配置的是Symmetric Encryption ,所以接下来我们选择Symmetric Provider并右击,如下:


此时新建一个Symmetric Algorithm Provider ,并选择一种加密算法,如下图:


之后出现 Cryptographic Key Wizard 的对话框,如下:


我们选择Create a new Key,这时候就出现了让我们输入类似注册码之类的对话框(这一处输入的十六进制数我还没搞懂有什么作用),我们点Generate,如下:



然后点 Next,选择我们建立的Key File的保存路径,如下:



再Next一下,这时让我们选择加密的模式,如下:


加密模式有两种,User mode 和 Machine mode
使用Machine mode的情况:
1、当你的应用程序运行在专门的服务器上,并且这台服务器上没有其他的应用程序;
2、你的服务器上同时运行了多个应用程序,你希望这些应用程序能够共享一些敏感的信息。
使用User mode的情况:
    如果你的应用程序运行在多程序的环境下,但你不希望你的应用程序中的敏感数据受到其他应用程序的影响或被其他应用程序访问;在这种情况下,每个应用程序的资源(例如:文件、数据库等)之间都是相互独立,互不影响的。
注意:如果你选择了DPAPI加密算法,然后再使用machine mode的话,那么加密后的数据只在当前的机器上有效,所以你必须为每台机器生成一个加密的数据。

然后点 Finish ,这时可以修改我们的 Cryptography Application Block 的配置名.


然后点File-->Save All,这样我们就完成了一个Symmetric Provider 的配置。此时我们的配置文件就会增加如下内容,当然这些内容我们也可以手工去添加。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  
<configSections>
    
<section name="securityCryptographyConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.Configuration.CryptographySettings, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" />
  
</configSections>
  
<securityCryptographyConfiguration>
    
<symmetricCryptoProviders>
      
<add algorithmType="System.Security.Cryptography.DESCryptoServiceProvider, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        protectedKeyFilename
="E:/研究中/Enterprise Library 2/Enterprise Library 2/key.key"
        protectedKeyProtectionScope
="CurrentUser" type="Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.SymmetricAlgorithmProvider, Microsoft.Practices.EnterpriseLibrary.Security.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        name
="MyCryptographyProvider" />
    
</symmetricCryptoProviders>
  
</securityCryptographyConfiguration>
</configuration>

第三部分:使用Cryptography Application Block
   这一部分介绍了使用Cryptography Application Block对数据进行加密与解密等操作。
1、加密与解密操作

[TestMethod]
        
public void UseCryptography()
        
{
            
//加密
            string name = Cryptographer.EncryptSymmetric("MyCryptographyProvider""SHY520");

            
//解密
            string rname = Cryptographer.DecryptSymmetric("MyCryptographyProvider", name);

            Assert.AreEqual(rname,
"SHY520");
        }

2、得到数据的Hash值,前提是我们要配置一个Hash Provider(具体的配置方法可以参考前面介绍的Symmetric Provider的配置方法),然后用如下方法得到Hash值,但是要注意,Hash值不可以解密。

[TestMethod]
        
public void GetHashValues()
        
{
            
byte[] valueToHash = (new UnicodeEncoding()).GetBytes("password");
            
byte[] generatedHash = Cryptographer.CreateHash("hashProvider", valueToHash);

            
// Clear the byte array memory.
            Array.Clear(valueToHash, 0, valueToHash.Length);

            Assert.AreEqual(
"password",generatedHash);
        }

当然,上面这个测试方法是肯定通过不了的。这里只是说明如何取得数据的Hash值。

3、通过比较一个数据和它已经生成的一个Hash值,来判断数据是否发生改变。

    [TestMethod]
        
public void CompareHashValue()
        
{
            
byte[] ovalue = (new UnicodeEncoding()).GetBytes("SHY520");
            
//创建ovalue的Hash值
            byte[] generatedHash = Cryptographer.CreateHash("hashProvider", ovalue);
            
//比较数据和它的Hash值,如果数据没有改变则返回true,改变了就返回false
            bool result = Cryptographer.CompareHash("hashProvider", ovalue, generatedHash);
            
//改变原来数据的值,再进行比较
            ovalue = (new UnicodeEncoding()).GetBytes("SHY521");
            
bool result1 = Cryptographer.CompareHash("hashProvider", ovalue, generatedHash);

            Assert.AreEqual(
false,result1);
            Assert.AreEqual(
true, result);
        }

     Cryptography Application Block 中包含的内容也不是很多,但是它其中包含了很多常见的加密算法,足以满足我们项目中的要求,今天我们对Cryptography Application Block的介绍就到此为止,希望对初学者有所帮助。

上一篇: Enterprise Library 2.0 -- Caching Application Block

补充:

加密Config文件:
首先,添加对System.Configuration.dll的引用
然后添加下面的代码:

Configuration config = null;
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.ConnectionStrings;

if (section.SectionInformation.IsProtected == false && section.ElementInformation.IsLocked == false)
{
section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");

section.SectionInformation.ForceSave = true;

config.Save(ConfigurationSaveMode.Full);


相关文章推荐

Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (高级)

本章介绍的是企业库加密应用程序模块Cryptographyproviders中为对称加密配置Key文件的3种方式: create a new key  : 使用一串字符串作为Key,然后通过加密...
  • anyqu
  • anyqu
  • 2012年09月11日 13:35
  • 609

Microsoft Enterprise Library 企业库5.0----Cryptography Application Block (高级)

本章介绍的是企业库加密应用程序模块Cryptographyproviders中为对称加密配置Key文件的3种方式: create a new key  : 使用一串字符串作为Key,然后通过加密保存...

C#日志扩展包之Microsoft Enterprise Library - Logging Application Block之配置

配置Logging Application Block可以使用两种方法:1、使用app.config文件配置,xml编辑器或Enterprise Library Configuration Tool;...

WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成

WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成 ...
  • cpcpc
  • cpcpc
  • 2011年01月18日 09:06
  • 497

Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block

企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演...

Microsoft Enterprise Library 5.0 系列(一) : Caching Application Block (初级)

本篇文章具体官方解释请参照以下链接: http://msdn.microsoft.com/en-us/library/ff664753%28v=PandP.50%29.aspx Microsof...
  • anyqu
  • anyqu
  • 2012年09月11日 13:25
  • 1046

Microsoft Enterprise Library 5.0 之 Data Access Application Block

企业库数据库访问模块的几大功能: 1.        最简单的功能,通过ExecuteNonQuery.方法执行SQL语句. 2.        执行ExecuteDataSet,返回Da...

Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block

代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中。整个流程如图:   我个人对Policy ...
  • anyqu
  • anyqu
  • 2012年09月11日 13:52
  • 741

Microsoft Enterprise Library 5.0 系列(七) Exception Handling Application Block

使用企业库异常处理应用程序模块的优势: 它支持整个应用程序体系结构层的异常处理,而不仅限于服务接口的界限。 它使得异常处理策略可以在管理层定义和维护,以便决策人员(可能是系统管理员和开发人员)可...
  • anyqu
  • anyqu
  • 2012年09月11日 13:50
  • 1404

Microsoft Enterprise Library 5.0 系列(四) Logging Application Block

企业库日志应用程序模块工作原理图:      从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log...
  • anyqu
  • anyqu
  • 2012年09月11日 13:46
  • 1035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Enterprise Library 2.0 -- Cryptography Application Block
举报原因:
原因补充:

(最多只允许输入30个字)