vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB2008, VB201027.06.11
AES 128 und 256 bit String Verschlüsselung

Mit Hilfe der hier beschriebenen Klasse cCrypt können Strings verschlüsselt und entschlüsselt werden.

Autor:   Dietmar ClassBewertung:  Views:  41.465 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Mit Hilfe der hier beschriebenen Klasse cCrypt können Strings verschlüsselt und entschlüsselt werden. Es wird dabei Advanced Encryption Standard (AES) verwendet in der Bit-Stärke 256 oder 128 Bit.

Benötigt wird das .NET Framework 3.5 oder höher!

Klasse cCrypt

Option Strict On
 
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( _
      "Salt-Wert_BitteBeiVerwendungDesCodesÄndern")
 
    ' 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 128-bit Schlüssel und 128-bit Block-Size
    Dim AES As New AesManaged
    AES.KeySize = AESKeySize ' möglich sind 256 oder 128 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( _
      "Salt-Wert_BitteBeiVerwendungDesCodesÄndern")
 
    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 256 oder 128 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

Verwendung der Klasse cCrypt

Benötigt wird ein Windows-Forms-Projekt mit folgenden Controls:

  • txtDecrypt = TextBox zur Eingabe des unverschlüsselter Textes
  • txtEncrypt = TextBox zur Anzeige des verschlüsselten Textes
  • Button1 = Button zum Verschlüsseln
  • Button2 = Button zum Entschlüsseln
  • txtPassword = TextBox zur Angabe des Passworts

Private Sub Form1_Load(sender As Object, :
  e As System.EventArgs) Handles Me.Load
 
  txtDecrypt.Text = "Hallo"
  txtPassword.Text = "MeinPasswort"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button1.Click
 
  If txtDecrypt.TextLength = 0 Then
    MsgBox("Es ist kein Text zum Verschlüsseln vorhanden.")
    Exit Sub
  End If
 
  ' Klasse cCrypt instanzieren zur Verschlüsselung
  Dim cCrypt As cCrypt = New cCrypt
 
  ' Text aus txtDecrypt verschlüsseln mit 256 bit:
  cCrypt.Encrypt(256, txtDecrypt.Text, txtPassword.Text)
 
  ' Verschlüsselten Text anzeigen:
  txtEncrypt.Text = cCrypt.EncryptedString
 
  txtDecrypt.Clear()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button2.Click
 
  ' Klasse cCrypt instanzieren zur Entschlüsselung
  Dim cCrypt As cCrypt = New cCrypt
 
  ' Text aus txtEncrypt entschlüsseln mit 256 bit:
  cCrypt.Decrypt(256, txtEncrypt.Text, txtPassword.Text)
 
  ' Entschlüsselten Text anzeigen:
  txtDecrypt.Text = cCrypt.DecryptedString
 
  txtEncrypt.Clear()
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.