參考資料:[C#.NET] 字串及檔案 利用 DES / AES 演算法加解密
此篇參考上方的參考資料,並翻成VB.NET。
Imports Microsoft.VisualBasic
Imports System.Security.Cryptography '加密
Imports System.Text
Imports System.IO
Public Class EnDe
'字串長度必須為8
Dim DesKey As String = "abc!@#df", DesIv As String = "+_)xyz*&"
Public Sub New()
End Sub
'參考資料https://dotblogs.com.tw/yc421206/archive/2012/04/18/71609.aspx
'source:要加密的字串
Function DesEncrypt(ByVal source As String) As String
Dim des As DESCryptoServiceProvider = New DESCryptoServiceProvider()
Dim key() As Byte = Nothing
Dim iv() As Byte = Nothing
Dim dataByteArray() As Byte = Nothing
key = Encoding.ASCII.GetBytes(DesKey)
iv = Encoding.ASCII.GetBytes(DesIv)
dataByteArray = Encoding.UTF8.GetBytes(source)
des.Key = key
des.IV = iv
Dim encrypt As String = String.Empty
Using ms As MemoryStream = New MemoryStream()
Try
Using cs As CryptoStream = New CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)
cs.Write(dataByteArray, 0, dataByteArray.Length)
cs.FlushFinalBlock()
Dim sb As StringBuilder = New StringBuilder()
For Each b As Byte In ms.ToArray()
sb.AppendFormat("{0:X2}", b)
Next
encrypt = sb.ToString()
End Using
Catch ex As Exception
encrypt = "error"
End Try
End Using
Return encrypt
End Function
'解密 encrypt:要解密的字串
Function DesDecrypt(ByVal encrypt As String) As String
Dim a1 As Integer = ((encrypt.Length) / 2)
a1 = a1 - 1
Dim dataByteArray(a1) As Byte
For x1 As Integer = 0 To a1
Dim i As Integer = Convert.ToInt32(encrypt.Substring(x1 * 2, 2), 16)
dataByteArray(x1) = CByte(i)
Next
Dim des As DESCryptoServiceProvider = New DESCryptoServiceProvider()
Dim key() As Byte = Nothing
Dim iv() As Byte = Nothing
key = Encoding.ASCII.GetBytes(DesKey)
iv = Encoding.ASCII.GetBytes(DesIv)
des.Key = key
des.IV = iv
Dim DesString As String = String.Empty
Using ms As MemoryStream = New MemoryStream()
Try
Using cs As CryptoStream = New CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)
cs.Write(dataByteArray, 0, dataByteArray.Length)
cs.FlushFinalBlock()
DesString = Encoding.UTF8.GetString(ms.ToArray())
End Using
Catch ex As Exception
DesString = "error"
End Try
End Using
Return DesString
End Function
End Class
用ASP.NET WebForm來測試,畫面很簡單,兩個TextBox、兩個Button(分別是加密、解密),程式碼如下。
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim str_en As String = String.Empty
Dim ed As EnDe
ed = New EnDe()
str_en = ed.DesEncrypt(TextBox1.Text)
Response.Write("[" & str_en & "]")
End Sub
Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim str_de As String = String.Empty
Dim ed As EnDe
ed = New EnDe()
str_de = ed.DesDecrypt(TextBox2.Text)
Response.Write("[" & str_de & "]")
End Sub
End Class
執行過程,如下:
沒有留言:
張貼留言