Enterprise Library 加密应用程序块关键场景(二)
用对称加密提供程序解密数据
如果使用对称加密提供程序加密数据,通常不得不使用同样的提供程序解密数据。典型目标
在此场景中,要使用对称提供程序解密提供的数据。对称提供程序的输出是没有加密的数据。
解决方案
调用 Cryptographer 类中静态方法 DecryptSymmetric 的适当重载(字符串或字节数组)来执行解密,提供使用的配置的对称提供程序的名称以及要解密的数据。
快速入门
对于使用 DecryptSymmetric 方法解密数据的扩展示例,请参见漫游:解密秘密。
使用 DecryptSymmetric
下列代码展示了如何使用 DecryptSymmetric 方法解密 base64 编码字符串格式的数据。
C#
string encryptedContentsBase64 = Cryptographer.EncryptSymmetric("symmProvider", "password");
// Decrypt the base64 encoded string.
string readableString;
readableString = Cryptographer.DecryptSymmetric("symmProvider", encryptedContentsBase64);
Visual Basic
Dim encryptedContentsBase64 As String
encryptedContentsBase64 = Cryptographer.EncryptSymmetric("symmProvider", "password")
' Decrypt the base64 encoded string.
Dim readableString As String
readableString = Cryptographer.DecryptSymmetric("symmProvider", encryptedContentsBase64)
下列代码展示了如何使用 DecryptSymmetric 方法解密字节数组格式的数据。
C#
byte[] valueToEncrypt = Encoding.Unicode.GetBytes("password");
byte[] encryptedContents = Cryptographer.EncryptSymmetric("symmProvider", valueToEncrypt);
// stringToDecrypt contains an encrypted string.
byte[] decryptedContents = Cryptographer.DecryptSymmetric("symmProvider", encryptedContents);
string plainText = (new UnicodeEncoding()).GetString(decryptedContents);
Visual Basic
Dim valueToEncrypt = Encoding.Unicode.GetBytes("password")
Dim encryptedContents As Byte() = Cryptographer.EncryptSymmetric("symmProvider", valueToEncrypt)
' stringToDecrypt contains an encrypted string.
Dim decryptedContents As Byte() = Cryptographer.EncryptSymmetric("symmProvider", stringToDecrypt)
Dim plainText As String = (New UnicodeEncoding).GetString(decryptedContents)
使用提示
确认在 Enterprise Library 配置控制台中配置了合适的对称提供程序。
获取哈希值
可能要获取哈希值的一个例子是有一个不想通过网络传输的密码时。典型目标
在此场景中,目标是使用应用程序块从输入数据中生成一个哈希值。
解决方案
调用 Cryptographer 类中的静态方法 CreateHash 的适当重载(字符串或字节数组)来获取哈希,指定被哈希的数据并提供配置的哈希提供程序的名称。
快速入门
对于如何使用 CreateHash 方法的一个扩展示例,请参见漫游:获取一个哈希值。
使用 CreateHash
下列代码展示了如何在字符串格式的数据上使用 CreateHash 方法。
C#
byte[] valueToHash = (new UnicodeEncoding()).GetBytes("password");
byte[] generatedHash = Cryptographer.CreateHash("hashProvider", valueToHash);
// Clear the byte array memory.
Array.Clear(valueToHash, 0, valueToHash.Length);
Visual Studio
Dim valueToHash = (New UnicodeEncoding).GetBytes("password")
Dim generatedHash As Byte() = Cryptographer.CreateHash("hashProvider", valueToHash)
' Clear the byte array memory.
Array.Clear(valueToHash, 0, valueToHash.Length)
使用提示
在创建一个哈希值时请考虑以下几点:
- CreateHash 方法有二个重载。重载的使用依赖于是从字符串还是从字节数据创建哈希。
- 确认已在 Enterprise Library 配置控制台中指定了哈希提供程序。
- 敏感数据应该尽快从内存中清除。在内存中保留未加密的敏感数据会暴露数据到安全风险中。要注意的是在内存中的数据也可能会放到硬盘上,因为操作系统会将数据写到一个交换文件。还有,如果系统崩溃,操作系统会转储内存中的数据到磁盘中。
校验哈希值是否与某些文本匹配
要检查一个哈希是否与某些文本匹配的一个例子是不得不验证数据在网络传输中没有被修改。在这种情况下,数据的哈希值保存在服务器上,当数据到达服务器时,它将与哈希值进行比较。典型目标
在此场景中,目标是比较纯文本和以前生成了哈希值的数据,以验证数据没有被修改。
解决方案
确定匹配的数据类型,可以转换纯文本到字节数组,或者转换哈希数据到字符串。调用 Cryptographer 类的静态方法 CompareHash 的适当重载(字符串或字节数组)以获得哈希,指定哈希的数据以及要比较的以前生成的哈希,还有使用的已配置的哈希提供程序的名称。
快速入门
如何使用 CompareHash 方法来到期一个对应一个用户标识的令牌的扩展示例,请参见漫游:检查哈希是否匹配某些文本。
使用 CompareHash
下列代码展示了如何在字符串格式的数据上使用 CompareHash 方法。
C#
// generatedHash contains a hash value for a previously hashed string.
byte[] stringToCompare = (new UnicodeEncoding()).GetBytes("TestValue");
bool comparisonSucceeded = Cryptographer.CompareHash("hashProvider", stringToCompare, generatedHash);
Visual Basic
' generatedHash contains a hash value for a previously hashed string.
Dim stringToCompare = (New UnicodeEncoding).GetBytes("TestValue")
Dim comparisonSucceeded As Boolean = Cryptographer.CompareHash( "hashProvider", stringToCompare, generatedHash)
使用提示
确认已在 Enterprise Library 配置控制台中指定了哈希提供程序。