密码系统与.NET Framework (二)[1]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

作者:淘特网

出处:http://www.tot.name

注:转载请注明出处

在第一篇文章里我介绍了密码学基础及相关的.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

本文关键:密码系统与.NET Framework (二)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top