Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB2008, VB2010 | 27.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 Class | Bewertung: | Views: 41.465 |
ohne Homepage | System: 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