Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0073: AES-Verschlüsselung mit dem AesManaged-Objekt

 von 

Beschreibung

Das .NET-Framework bietet komfortable Funktionen zur hochwertigen Verschlüsselung. In diesem Beispiel wird gezeigt, wie aus einem Passwort mittels der PBKDF2-Schlüsselableitungsfunktion (RFC 2898) ein Schlüssel erstellt und dieser zur Verschlüsselung von Daten mit Hilfe des Advanced Encryption Standards (AES) verwendet wird.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [14,55 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    Aus
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################# Form1.vb ###################################
' ##############################################################################
Imports System.Security.Cryptography

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Dim oAesProvider As New AesManaged
        Dim btClear() As Byte

        ' Das 'Salz' wird verwendet um das Passwort zu 'würzen'. Es müssen 
        ' hier mindestens 8 Bytes angegeben werden die einen zusätzlich 
        ' Parameter zur Berechnung des Schlüssels darstellen. Nur wer das 
        ' richtige Passwort und das verwendete Salz kennt, kann die Daten 
        ' entschlüsseln.
        Dim btSalt() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}

        Dim oKeyGenerator As New Rfc2898DeriveBytes(txtPassword.Text, btSalt)

        ' Durch die Key und IV (Initialisation vector) Eigenschaften wird 
        ' der Algorithmus initialisiert:
        oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
        oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)

        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, _
            oAesProvider.CreateEncryptor(), _
            CryptoStreamMode.Write)
        btClear = System.Text.Encoding.UTF8.GetBytes(txtClear.Text)
        cs.Write(btClear, 0, btClear.Length)
        cs.Close()
        txtCipher.Text = Convert.ToBase64String(ms.ToArray)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click

        Dim oAesProvider As New AesManaged
        Dim btCipher() As Byte

        Dim btSalt() As Byte = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
        Dim oKeyGenerator As New Rfc2898DeriveBytes(txtPassword.Text, btSalt)
        oAesProvider.Key = oKeyGenerator.GetBytes(oAesProvider.Key.Length)
        oAesProvider.IV = oKeyGenerator.GetBytes(oAesProvider.IV.Length)

        Dim ms As New IO.MemoryStream
        Dim cs As New CryptoStream(ms, oAesProvider.CreateDecryptor(), _
            CryptoStreamMode.Write)
        Try
            btCipher = Convert.FromBase64String(txtCipher.Text)
            cs.Write(btCipher, 0, btCipher.Length)
            cs.Close()
            txtClear.Text = System.Text.Encoding.UTF8.GetString(ms.ToArray)
        Catch
            MsgBox("Entschlüsselung nicht erfolgreich!", _
                MsgBoxStyle.Exclamation, _
                "Fehler!")
        End Try
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Snaut am 24.03.2010 um 09:22

Danke für den Code. Man sollte jedoch abschließend für oAesProvider und cs einen Clear durchführen. Die Objekte bleiben bis zum nächsten aufräumen im Speicher und werden nur entsprechend markiert. Clear überscheibt den Inhalt mit 0.