Microsoft .NET 中的简化加密__教程 |
|
日期:2007-5-20 1:15:08 人气:168 [大 中 小] |
|
|
|
' Visual Basic .NET Private Sub btnEncrypt_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles cmdEncrypt.Click txtEncrypted.Text = EncryptString(txtOriginal.Text) End Sub
// C# private void cmdEncrypt_Click(object sender, System.EventArgs e) { txtEncrypted.Text = EncryptString(txtOriginal.Text); } Click 事件过程将调用名为 EncryptString() 的方法,从 Original String(原始字符串)文本框中接受值并对其进行加密。然后返回该值并将其放到 Encrypted String(加密字符串)文本框中。下面是 EncryptString() 方法的代码。
' Visual Basic .NET Private Function EncryptString(ByVal Value As String) _ As String Dim ct As ICryptoTransform Dim ms As MemoryStream Dim cs As CryptoStream Dim byt() As Byte
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV)
byt = Encoding.UTF8.GetBytes(Value)
ms = New MemoryStream cs = New CryptoStream(ms, ct, CryptoStreamMode.Write) cs.Write(byt, 0, byt.Length) cs.FlushFinalBlock()
cs.Close()
Return Convert.ToBase64String(ms.ToArray()) End Function
// C# private string EncryptString(string Value) { ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray()); } 现在我们分开看一下各行代码并了解这些代码的作用。首先是加密进程的几个变量。
Dim ct As ICryptoTransform Dim ms As MemoryStream Dim cs As CryptoStream Dim byt() As Byte ICryptoTransform 是一个接口。需要此接口才能在任何服务提供程序上调用 CreateEncryptor 方法,服务提供程序将返回定义该接口的实际 encryptor 对象。
然后需要将原始字符串转换成字节数组。大多数 .NET 加密算法处理的是字节数组而不是字符串。
byt = Encoding.UTF8.GetBytes(Value) 现在可以执行实际的加密了。此进程需要创建一个数据流,用于将加密的字节写入到其中。要使用名为 ms 的 MemoryStream 对象、ICryptoTransform 对象(提供给 CryptoStream 类的构造函数)以及说明您希望在何种模式(读、写等)下创建该类的枚举常数。创建 CryptoStream 对象 cs 后,现在使用 CryptoStream 对象的 Write 方法将数据写入到内存数据流。这就是进行实际加密的方法,加密每个数据块时,数据将被写入 MemoryStream 对象。
ms = New MemoryStream cs = New CryptoStream(ms, ct, CryptoStreamMode.Write) cs.Write(byt, 0, byt.Length) cs.FlushFinalBlock()
cs.Close() 创建 MemoryStream 后,该代码将在 CryptoStream 对象上执行 FlushFinalBlock 方法,以确保所有数据均被写入 MemoryStream 对象。该过程将关闭 CryptoStream 对象。
最后,该过程将内存数据流从字节数组转换回字符串,这样才可以在窗体上的文本框内显示该字符串。可以使用 MemoryStream ToArray() 方法从数据流中获取字节数组,然后调用 Convert.ToBase64String() 方法,该方法接受字节数组输入并使用 Base64 编码方法将该字符串编码为可读内容。
解密数据 加密数据后,有时还需要解密数据。解密数据的过程非常简单,与加密过程相似。您需要提供加密过程中使用的密钥和初始化向量。SymmetricAlgorithm 类的 Key 和 IV 属性被定义为字节数组。因此,设置这些属性之前需要提供您创建的字符串并将其转换成字节数组。下面我们看一下窗体内用于解密字符串的 DecryptString 方法。该方法是从窗体上 Decrypt(解密)按钮的 Click 事件处理程序中调用的。
' Visual Basic .NET Private Function DecryptString(ByVal Value As String) _ As String Dim ct As ICryptoTransform Dim ms As MemoryStream |
|
出处:本站原创 作者:佚名 |
|
|