Enterprise Library 3.0--Cryptography Application Block

来源:互联网 发布:办公软件基本教程 编辑:程序博客网 时间:2024/05/21 06:19

加密应用程序块的依赖
1、内核库:Enterprise Library 内核提供了如度量和配置这样的服务,并且是所有 Enterprise Library 应用程序块的共享依赖。内核库功能包含在程序集 Microsoft.Practices.EnterpriseLibrary.Common.dll 中。
2、ObjectBuilder 子系统:ObjectBuilder 子系统执行所有重复且必要的对象实例的创建和销毁任务,且依然提供了高级的灵活性。Enterprise Library 将 ObjectBuilder 用于如注入配置到程序块的类中和连接度量类到应用程序块这样的任务中。ObjectBuilder 子系统包含在程序集 Microsoft.Practices.ObjectBuilder.dll 。

加密应用程序块提供了“哈希加密(Hash Providers)”和“对称加密(Symmetric Providers)”两种加密提供程序。
如果数据仅需要加密,而不需要解密(例如,密码),就可以使用哈希。如果数据需要加密也需要解决(例如,传输敏感客户数据),就可以使用对称加密。

对称加密”在加密和解密数据时使用同样的密钥,发送数据和接收数据的应用程序都必须拥有此密钥。
非对称加密”使用一个密钥来加密消息,另一个密钥来解密消息。加密应用程序块不支持“非对称加密”。

一、配置
1、右击Web.Config节点,选择"New"->"Cryptography Application Block"
2、在"Hash Providers"上右击"New"->"HashAlgorithm Provider",选择相应的加密提供程序,配置哈希加密;在"Symmetric Provider"上右击"New"->"Symmetric Algorithm Provider",选择相应的加密提供程序。
3、选中"Cryptography Application Block"配置节,设置 DefaultHashProvider 属性。在这设置的是,如果应用程序代码没有指定另一个提供程序的话,加密应用程序块将使用的哈希提供程序实例。
4、选中"Cryptography Application Block"配置节,设置 DefaultSymmetricCryptoProvider 属性。在此设置的是,如果应用程序代码没有指定另一个提供程序的话,加密应用程序块将使用的对称加密提供程序的实例。


二、准备应用程序
1、添加Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll 程序集引用。
2、添加 Enterprise Library Common 程序集的引用,Microsoft.Practices.EnterpriseLibrary.Common.dll,以及到 ObjectBuilder 程序集的引用,Microsoft.Practices.EnterpriseLibrary.ObjectBuilder.dll
3、可以添加using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography的 using 语句(C#)到源代码文件的顶部。

三、用对称提供程序加密数据
1、使用 EncryptSymmetric 方法来加密字符串形式的数据。此重载返回的是 base64 编码的字符串。
string encryptedContentsBase64 = Cryptographer.EncryptSymmetric("symmProvider", "password");
2、使用 EncryptSymmetric 方法加密字节数组中的数据。此重载返回一个字节数组。
byte[] valueToEncrypt = Encoding.Unicode.GetBytes("password");
byte[] encryptedContents = Cryptographer.EncryptSymmetric("symmProvider", valueToEncrypt);
Array.Clear(valueToEncrypt, 0, valueToEncrypt.Length);//
敏感数据尽可能快的从内存中清除。留下未加密的数据在内存中会使数据面临安全威胁。

四、用对称加密提供程序解密数据
1、使用 DecryptSymmetric 方法解密 base64 编码字符串格式的数据。
//先将"password"字符串加密
string encryptedContentsBase64 = Cryptographer.EncryptSymmetric("symmProvider", "password");
//解密Base64编码字符串
string readableString;
readableString = Cryptographer.DecryptSymmetric("symmProvider", encryptedContentsBase64);
2、使用 DecryptSymmetric 方法解密字节数组格式的数据。
//先将字符串"password"加密为二进制数组
byte[] valueToEncrypt = Encoding.Unicode.GetBytes("password");
byte[] encryptedContents = Cryptographer.EncryptSymmetric("symmProvider", valueToEncrypt);
//将加密了的二进制数组解密为字符串
byte[] decryptedContents = Cryptographer.DecryptSymmetric("symmProvider", encryptedContents);
string plainText = (new UnicodeEncoding()).GetString(decryptedContents);

五、获取哈希值
在字符串格式的数据上使用 CreateHash 方法,获取哈希值。
byte[] valueToHash = (new UnicodeEncoding()).GetBytes("password");
byte[] generatedHash = Cryptographer.CreateHash("hashProvider", valueToHash);
Array.Clear(valueToHash, 0, valueToHash.Length);
CreateHash 方法有二个重载。重载的使用依赖于是从字符串还是从字节数据创建哈希。

六、校验哈希值是否与某些文本匹配
使用 CompareHash 方法校验明文文本与加密文本之间是否匹配
byte[] stringToCompare = (new UnicodeEncoding()).GetBytes("TestValue");
bool comparisonSucceeded = Cryptographer.CompareHash("hashProvider", stringToCompare, generatedHash);

原创粉丝点击