.NET环境下实现DES及MD5加密
摘要:加密技术通常用于保护机密信息的安全性和完整性。由于加密技术比较复杂,如果用户自行编程实现加密算法不但费时费力而且难以保证安全性和可靠性。微软发布的.NET框架中提供了一套完整的加密算法实现方法类,用户可以根据自己的需求直接调用,实现起来快速、安全、可靠。
关键词:.NET;DES;MD5
1.NET环境下与安全相关的类
.NET的System.Security.Cryptography命名空间中包含一系列类,能够实现对称和非对称加密、创建哈希值和生成随机数等功能,如表1所示。
下面举例说明如何在程序中使用.NET安全类实现DES和MD5加密。
2DES算法实现
在项目中新建一个类,命名为MyCryptography,成员的主要功能如表2所示。
在程序中加入对System.IO,System.Security.Cryptography,System.Text三个名空间的引用。
主要代码:
Private plain As String‟明文
Private code As Byte() „密文
Private md5code As Byte()‟MD5值
Private key As Byte()‟DES密钥
Private IV As Byte() „DES向量
Private descsp As DESCryptoServiceProvider‟DES算法提供程序对象
Public Sub New()
CreateDESKey()
End Sub
„生成DES加密算法的密钥和初始化向量,在构造函数New()中调用
Private Sub CreateDESKey()
Dim byte_key As Byte()={123,112,22,11,21,211,111,215}
Dim byte_IV As Byte()= {26,78,91,161,71,55,185,30}
key = byte_key
IV = byte_IV
descsp = New DESCryptoServiceProvider
descsp.Key = byte_key
descsp.IV = byte_key
End Sub
„加密函数
Private Function DESEncrypt(ByVal plain As String, SymmetricAlgorithm) As Byte()
Dim ms As New MemoryStream()
Dim enStream As New CryptoStream(ms, key.CreateEncrypt
or, CryptoStreamMode.Write)
Dim sw As New StreamWriter(enStream)
sw.WriteLine(plain)
sw.Close()
enStream.Close()
code = ms.ToArray
ByVal key As
ms.Close()
Return code
End Function
„解密函数
Private Function DESDecrypt(ByVal code As Byte(), ByVal key As SymmetricAlgorithm) As String
Dim ms As New MemoryStream(code)
Dim deStream As New CryptoStream(ms, key.CreateDecrypt
or, CryptoStreamMode.Read)
Dim sr As New StreamReader(deStream)
Dim val As String = sr.ReadLine()
sr.Close()
deStream.Close()
ms.Close()
Return val
End Function
„对明文进行加密,返回的密文为十六进制字符串
Public Function enDES(ByVal plain As String) As String
Dim strcode As String = “”
Me.DESEncrypt(plain, descsp)
Dim i As Integer = 0
For i = 0 To code.Length - 1
strcode = strcode & Hex(code(i))
Next
Return strcode
End Function
„实现解密的函数
Public Function deDES() As String
Dim strplain As String = “”
strplain = Me.DESDecrypt(code, descsp)
Return strplain
End Function
3MD5算法实现
„得到明文的MD5值
Private Function CreateMD5Code(ByVal plain As String)
„用UTF-32格式对明文进行编码
Dim ecd As System.Text.Encoding
ecd = Encoding.GetEncoding(“utf-32”)
„将明文转换为字节数组
Dim dtcode() As Byte = ecd.GetBytes(plain)
„计算明文的MD5值
Dim md5csp As New MD5CryptoServiceProvider
Return md5csp.ComputeHash(dtcode)
End Function
„将MD5值转换为十六进制字符串
As Byte()
Public Function MD5(ByVal plain As String) As String
md5code = Me.CreateMD5Code(plain)
Dim strmd5 As String = “”
Dim i As Integer = 0
For i = 0 To md5code.Length - 1
strmd5 = strmd5 & Hex(md5code(i)) Next
Return strmd5
End Function
使用时只需实例化MyCryptography类,调用enDES()、deDES()和MD5()函数并传入明文作为参数即可实现DES和MD5加密功能。