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:
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.521 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |