vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  41.468 
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

Dieser Tipp wurde bereits 41.468 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel