作者:淘特网
注:转载请注明出处
在第一篇文章里我介绍了密码学基础及相关的.NET Framework类。这篇文章
中我们将学习如何使用Triple-DES 算法进行密钥加密。
Triple-DES 算法
在System.Security.Cryptography
名称空间中包含一个TripleDESCryptoServiceProvider 类,它是用来为你的数据提供Triple-DES加密的。 DES支持数据加密标准。这里"Triple"(也就是三倍的意思)这所以放到DES前,是因为它将数据进行三次编码。
密钥加密需要两样东西来加密数据:
。密钥
。初始向量。
密码算法使用一个链表的技术编成密码数据,它将整个数据编码成一个个分离的块。前一个编码过的数据块又被用作编码当前数据,依次类推。
初始向量-Initialization Vector (IV),则是作为种子为第一块字节单元提供加密、解密服务。这可以保证一个数据中不会产生两个相同密文单元。
使用TripleDESCryptoServiceProvider类,密钥必需是24字节的,并且初始向量必需是8字节。
下面是使用TripleDESCryptoServiceProvider类的例子:
在这个例子中,我们首先创建一个叫作SecurityHelper 的类,它将帮助我们加密、解密字符数据。下面是原碼:
| Imports System.Security.Cryptography Imports System.IO Imports System.Text Public Class SecurityHelper Public Key() As Byte Public IV() As Byte Public Function Encrypt(ByVal strData As String) As Byte() Dim data() As Byte = ASCIIEncoding.ASCII.GetBytes(strData) Dim tdes As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider If Key Is Nothing Then tdes.GenerateKey() tdes.GenerateIV() Key = tdes.Key IV = tdes.IV Else tdes.Key = Key tdes.IV = IV End If Dim encryptor As ICryptoTransform = tdes.CreateEncryptor() Dim ms As New MemoryStream Dim cs As CryptoStream = New CryptoStream(ms, encryptor, CryptoStreamMode.Write) cs.Write(data, 0, data.Length) cs.FlushFinalBlock() ms.Position = 0 Dim result(ms.Length - 1) As Byte ms.Read(result, 0, ms.Length) cs.Close() Return result End Function Public Function Decrypt(ByVal data() As Byte) As String Dim tdes As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider tdes.Key = Key tdes.IV = IV Dim decryptor As ICryptoTransform = tdes.CreateDecryptor() Dim ms As New MemoryStream Dim cs As CryptoStream = New CryptoStream(ms, decryptor, CryptoStreamMode.Write) cs.Write(data, 0, data.Length) cs.FlushFinalBlock() ms.Position = 0 Dim result(ms.Length - 1) As Byte ms.Read(result, 0, ms.Length) cs.Close() Return ASCIIEncoding.ASCII.GetString(result) End Function End Class |