首页 » Asp.Net, VB.NET » 阅读文章

VB.NET DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串

2009年5月26日

今天,收到网友 残羊 的留言,咨询DES加密的事,需要VB.NET的,就把C#的转换了一下,欢迎多交流

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography

'----------------------------------------------
' *  DES加密、解密类库,加密结果使用BASE64编码返回,支持加密和解密文件,支持UNICODE及中文
' *  作者: 三角猫/DeltaCat
' *  网址: http://www.zu14.cn
' *  转载务必保留此信息
' * ---------------------------------------------
'

Namespace ZU14
   NotInheritable Public Class DES
      Private iv As String = "1234的yzo"
      Private key As String = "123在yzo"

      '/ <summary>
      '/ DES加密偏移量,必须是>=8位长的字符串
      '/ </summary>

      Public Property IV() As String
         Get
            Return iv
         End Get
         Set
            iv = value
         End Set
      End Property
      '/ <summary>
      '/ DES加密的私钥,必须是8位长的字符串
      '/ </summary>

      Public Property Key() As String
         Get
            Return key
         End Get
         Set
            key = value
         End Set
      End Property

      '/ <summary>
      '/ 对字符串进行DES加密
      '/ </summary>
      '/ <param name="sourceString">待加密的字符串</param>
      '/ <returns>加密后的BASE64编码的字符串</returns>
      Public Function Encrypt(sourceString As String) As String
         Dim btKey As Byte() = Encoding.Default.GetBytes(key)
         Dim btIV As Byte() = Encoding.Default.GetBytes(iv)
         Dim des As New DESCryptoServiceProvider()
         Dim ms As New MemoryStream()
         Try
            Dim inData As Byte() = Encoding.Default.GetBytes(sourceString)
            Try
               Dim cs As New CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write)
               Try
                  cs.Write(inData, 0, inData.Length)
                  cs.FlushFinalBlock()
               Finally
                  cs.Dispose()
               End Try

               Return Convert.ToBase64String(ms.ToArray())
            Catch
            End Try
         Finally
            ms.Dispose()
         End Try
      End Function 'Encrypt

      '/ <summary>
      '/ 对DES加密后的字符串进行解密
      '/ </summary>
      '/ <param name="encryptedString">待解密的字符串</param>
      '/ <returns>解密后的字符串</returns>
      Public Function Decrypt(encryptedString As String) As String
         Dim btKey As Byte() = Encoding.Default.GetBytes(key)
         Dim btIV As Byte() = Encoding.Default.GetBytes(iv)
         Dim des As New DESCryptoServiceProvider()

         Dim ms As New MemoryStream()
         Try
            Dim inData As Byte() = Convert.FromBase64String(encryptedString)
            Try
               Dim cs As New CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write)
               Try
                  cs.Write(inData, 0, inData.Length)
                  cs.FlushFinalBlock()
               Finally
                  cs.Dispose()
               End Try

               Return Encoding.Default.GetString(ms.ToArray())
            Catch
            End Try
         Finally
            ms.Dispose()
         End Try
      End Function 'Decrypt

      '/ <summary>
      '/ 对文件内容进行DES加密
      '/ </summary>
      '/ <param name="sourceFile">待加密的文件绝对路径</param>
      '/ <param name="destFile">加密后的文件保存的绝对路径</param>
      Overloads Public Sub EncryptFile(sourceFile As String, destFile As String)
         If Not File.Exists(sourceFile) Then
            Throw New FileNotFoundException("指定的文件路径不存在!", sourceFile)
         End If
         Dim btKey As Byte() = Encoding.Default.GetBytes(key)
         Dim btIV As Byte() = Encoding.Default.GetBytes(iv)
         Dim des As New DESCryptoServiceProvider()
         Dim btFile As Byte() = File.ReadAllBytes(sourceFile)

         Dim fs As New FileStream(destFile, FileMode.Create, FileAccess.Write)
         Try
            Try
               Dim cs As New CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write)
               Try
                  cs.Write(btFile, 0, btFile.Length)
                  cs.FlushFinalBlock()
               Finally
                  cs.Dispose()
               End Try
            Catch
            Finally
               fs.Close()
            End Try
         Finally
            fs.Dispose()
         End Try
      End Sub 'EncryptFile

      '/ <summary>
      '/ 对文件内容进行DES加密,加密后覆盖掉原来的文件
      '/ </summary>
      '/ <param name="sourceFile">待加密的文件的绝对路径</param>
      Overloads Public Sub EncryptFile(sourceFile As String)
         EncryptFile(sourceFile, sourceFile)
      End Sub 'EncryptFile

      '/ <summary>
      '/ 对文件内容进行DES解密
      '/ </summary>
      '/ <param name="sourceFile">待解密的文件绝对路径</param>
      '/ <param name="destFile">解密后的文件保存的绝对路径</param>
      Overloads Public Sub DecryptFile(sourceFile As String, destFile As String)
         If Not File.Exists(sourceFile) Then
            Throw New FileNotFoundException("指定的文件路径不存在!", sourceFile)
         End If
         Dim btKey As Byte() = Encoding.Default.GetBytes(key)
         Dim btIV As Byte() = Encoding.Default.GetBytes(iv)
         Dim des As New DESCryptoServiceProvider()
         Dim btFile As Byte() = File.ReadAllBytes(sourceFile)

         Dim fs As New FileStream(destFile, FileMode.Create, FileAccess.Write)
         Try
            Try
               Dim cs As New CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write)
               Try
                  cs.Write(btFile, 0, btFile.Length)
                  cs.FlushFinalBlock()
               Finally
                  cs.Dispose()
               End Try
            Catch
            Finally
               fs.Close()
            End Try
         Finally
            fs.Dispose()
         End Try
      End Sub 'DecryptFile

      '/ <summary>
      '/ 对文件内容进行DES解密,加密后覆盖掉原来的文件
      '/ </summary>
      '/ <param name="sourceFile">待解密的文件的绝对路径</param>
      Overloads Public Sub DecryptFile(sourceFile As String)
         DecryptFile(sourceFile, sourceFile)
      End Sub 'DecryptFile
   End Class 'DES
End Namespace 'ZU14

 

使用方法

Dim des As New ZU14.DES()
des.IV = "abcd哈哈笑"
des.Key = "必须八位"

Dim es As String = des.Encrypt("")
Console.WriteLine(es)
Console.Write(des.Decrypt(es))

des.EncryptFile("d:\a.txt", "d:\b.txt")
des.DecryptFile("d:\b.txt") 

Console.ReadKey(True)

和别人一起分享吧:
  • Google Bookmarks
  • QQ书签
  • 饭否
  • 校内网
  • 豆瓣九点
  • 嘀咕
  • 365Key网摘
  • POCO网摘
  • 豆瓣
  • 开心网
  • 新浪ViVi
  • 百度搜藏
  • email
  • Add to favorites
  • Facebook
  • Live
  • 收客
  • Twitter
  • del.icio.us
  • PDF
  • Yigg
  • Print
  • Digg
  • Haohao
  • RSS
  • Yahoo! Bookmarks

本文作者:三角猫 DeltaCat
文章出处:真有意思网(http://www.zu14.cn)
引用地址:点击复制本文的 Trackback Url
文章链接:http://www.zu14.cn/2009/05/26/vbnet-des-library-support-file-unicode-base64-encoding/ [复制] (转载请注明出处及链接)

Asp.Net, VB.NET , , , , ,

上一篇 »:

下一篇 »:
  1. | #1

    @重阳 :
    客气了

  2. | #2

    以后多多关照

  3. | #3

    @殘羊 :
    不客气。
    不过,我是用 C# 的, VB.NET 不是很熟

  4. 殘羊
    | #4

    十分感谢,不过我以为一直用VB6,最近才开始学VB.net,所以以后还会多有打扰。

  1. 目前还没有任何 trackbacks 和 pingbacks.

 

Related Posts with Thumbnails