Microsoft .NET 中的简化加密__教程 |
|
日期:2007-5-20 1:15:08 人气:168 [大 中 小] |
|
|
|
Dim cs As CryptoStream Dim byt() As Byte
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV)
byt = Convert.FromBase64String(Value)
ms = New MemoryStream cs = New CryptoStream(ms, ct, CryptoStreamMode.Write) cs.Write(byt, 0, byt.Length) cs.FlushFinalBlock()
cs.Close()
Return Encoding.UTF8.GetString(ms.ToArray()) End Function
// C# private string DecryptString(string Value) { ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray()); } Encrypt 函数和 Decrypt 函数只有三个不同之处。
需要使用 CryptoServiceProvider 类的 CreateDecryptor 方法来创建相应的 ICtryptoTransform 对象。 需要将 Base64 编码字符串转换成字节数组。需要使用 Convert.FromBase64String 方法来实现此转换。 通过对原始字节数组进行转换,将字节数组转换成相应的内存数据流。需要将内存数据流从字节数组转换回可以在窗体上再次显示的普通字符串。需要使用 Encoding.UTF8.GetString() 方法来实现此转换。 注意:Encoding.UTF8 类来自于 System.Text 命名空间。 是否可以使其更简单?! 尽管到目前为止显示的代码并不难,但有很多不同的类和接口您可能还不习惯于使用。此外,还要记住很多代码。下面我们学习如何将 Cryptography 类包装成易于使用的类。
名为 PDSACryptography 的程序集中有两个类,分别为 PDSAHash 和 PDSAEncryption。这两个类用于封装创建散列字符串或加密字符串的实际机制。此外,它们还允许您使用枚举常数来决定要使用哪种散列或加密算法。不必记住每个不同的加密服务提供程序的所有不同的名称,即可获得不错的 Intellisense® 提供程序列表。
使用 PDSAHash 包装散列 PDSAHash 类包含属性 HashType、HashObject、OriginalString、HashString、SaltValue、UseSalt 和 SaltLength。与该类相关的方法包括 SetEncryptor、CreateSalt、Reset 和 CreateHash。该类中创建了一个称为 PDSAHashType 的枚举,您可以从中选择要使用的相应散列类。该类的作用是将上文所示的代码简化为以下代码。
Private Sub UsePDSAHash() Dim ph As New PDSAHash(PDSAHash.PDSAHashType.MD5)
MessageBox.Show(ph.CreateHash("Paul")) End Sub 我宁愿键入以上代码也不愿意记住上文显示的所有代码。如您所见,这段代码相当简单,与上文所述的代码完全相同,只是被包装到一个易于使用的接口中。您可以从本文包含的示例中找到完整的类。下面列举了可以使用该类创建的不同散列算法。
Public Enum PDSAHashType As Byte MD5 SHA1 SHA256 SHA384 SHA512 End Enum 其中的每个算法都为最终的散列提供了一个不同的安全级别。.NET 中完整的散列类列表如下所示:
MD5CryptoServiceProvider SHA1CryptoServiceProvider SHA256Managed SHA384Managed SHA512Managed 有关这些不同的散列类型的详细信息,请参阅 Visual Studio .NET 联机文档。
使用 PDSAEncryption 包装加密 就像 PDSAHash 类可以包装 .NET Framework 中的所有散列功能一样,PDSAEncryption 类可用于包装 .NET Framework 中的各种对称算法类。PDSAEncryption 类包括以下枚举类型,允许您创建各种加密/解密对象。
Public Enum PDSAEncryptionType As Byte DES RC2 Rijndael TripleDES End Enum 同样,每个服务提供程序都为加密字符串提供了不同的安全级别。这在 Visual Studio .NET 联机文档中都有详细的介绍,这里不再赘述。
该类包含属性 EncryptionType、OriginalString、EncryptedString、Key、KeyString、IV、IVString 和 CryptoProvider。其中的大多数属性都是不言自明的,但 Key 和 IV 属于字节数组,而 KeyString 和 IVString 是这些字节数组的字符串表示。
该类还包含一些方法。例如 Encrypt 和 Decrypt。还有 GenerateKey 和 GenerateIV 方法,如果没有现成的密钥和 IV,可以使用这两个方法创建一个密钥和 IV。另外还有 SetEncryptor 方法,它用于创建将在各种方法中使用的新的 CryptoProvider 对象。 |
|
出处:本站原创 作者:佚名 |
|
|