Imports System.Security.Cryptography
Public Class cCrypt
#Region "Zustandsvariablen"
Private EncryptedString_ As String
Private DecryptedString_ As String
#End Region
Public Sub New()
End Sub
#Region "Methoden"
' Verschlüsseln
Public Sub Encrypt(ByVal AESKeySize As Int32, _
ByVal DecryptedString As String, _
ByVal Password As String)
' Der Salt-Wert ist eine zufällig gewählte Zeichenfolge,
' wenn man so will ein zweites Passwort.
' Nur wer den Salt-Wert und das Passwort kennt,
' kann entschlüsseln.
' Durch Verwendung eines Salt-Wertes ist es deutlich
' schwerer das Passwort zu knacken.
' Wird das Passwort selber zur Erstellung des Salt-Wertes
' verwendet, muss dieses mindestens 8 Zeichen haben.
Dim Salt() As Byte
Salt = System.Text.Encoding.UTF8.GetBytes( _
"12345")
' Mit Hilfe des Passwortes und des Salt wird ein Key (Hash-Wert)
' generiert, der später zur Initialisierung des
' AES-Algorithmus verwendt wird.
Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
' Instanzierung des AES-Algorithmus-Objekts mit 256-bit
' oder 256-bit Schlüssel und 256-bit Block-Size
Dim AES As New AesManaged
AES.KeySize = AESKeySize ' möglich sind 128 oder 256 bit
AES.BlockSize = 128
' Algorithmus initialisieren:
AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
' Memory-Stream und Crypto-Stream erzeugen -> CreateEncryptor()
Dim ms As New IO.MemoryStream
Dim cs As New CryptoStream(ms, AES.CreateEncryptor(), _
CryptoStreamMode.Write)
' Daten verschlüsseln:
Dim Data() As Byte
Data = System.Text.Encoding.UTF8.GetBytes(DecryptedString)
cs.Write(Data, 0, Data.Length)
cs.FlushFinalBlock()
cs.Close()
' Verschlüsselte Daten als String ausgeben:
EncryptedString_ = Convert.ToBase64String(ms.ToArray)
ms.Close()
AES.Clear()
End Sub
' Entschlüsseln
Public Sub Decrypt(ByVal AESKeySize As Int32, _
ByVal EncryptedString As String, _
ByVal Password As String)
' Der Salt-Wert und das Passwort müssen mit dem übereinstimmen,
' das bei der Verschlüsselung verwendet wurde:
Dim Salt() As Byte
Salt = System.Text.Encoding.UTF8.GetBytes( _
"12345")
Dim GenerierterKey As New Rfc2898DeriveBytes(Password, Salt)
' Instanzierung des AES-Algorithmus-Objekts:
Dim AES As New AesManaged
' Ein mit 256 bit verschlüsselter String kann
' auch nur mit 256 bit entschlüsselt werden!
AES.KeySize = AESKeySize ' möglich sind 128 oder 256 bit
AES.BlockSize = 128
' Algorithmus initialisieren:
AES.Key = GenerierterKey.GetBytes(AES.KeySize \ 8)
AES.IV = GenerierterKey.GetBytes(AES.BlockSize \ 8)
' Memory-Stream und Crypto-Stream erzeugen -> CreateDecryptor()
Dim ms As New IO.MemoryStream
Dim cs As New CryptoStream(ms, AES.CreateDecryptor(), _
CryptoStreamMode.Write)
Try ' Daten entschlüsseln:
Dim Data() As Byte
Data = Convert.FromBase64String(EncryptedString)
cs.Write(Data, 0, Data.Length)
cs.FlushFinalBlock()
cs.Close()
' Die entschlüsselten Daten als String ausgeben:
DecryptedString_ = System.Text.Encoding.UTF8.GetString(ms.ToArray)
ms.Close()
AES.Clear()
Catch ex As Exception
DecryptedString_ = "Ungültiges Passwort!"
End Try
End Sub
#End Region
#Region "Eigenschaften"
ReadOnly Property EncryptedString() As String
Get
Return EncryptedString_
End Get
End Property
ReadOnly Property DecryptedString() As String
Get
Return DecryptedString_
End Get
End Property
#End Region
End Class