Exemplarische Vorgehensweise: Verschlüsseln und Entschlüsseln von Zeichenfolgen in Visual Basic

Aktualisiert: November 2007

In dieser exemplarischen Vorgehensweise wird gezeigt, wie die DESCryptoServiceProvider-Klasse zum Verschlüsseln und Entschlüsseln von Zeichenfolgen mithilfe der CSP (Cryptographic Service Provider)-Version des TripleDES (Triple Data Encryption Standard)-Algorithmus verwendet wird. Der erste Schritt besteht im Erstellen einer einfachen Wrapperklasse, die den 3DES-Algorithmus kapselt und die gespeicherten Daten als Base-64-codierte Zeichenfolge speichert. Anschließend wird dieser Wrapper verwendet, um private Benutzerdaten in einer Textdatei mit öffentlichem Zugriff sicher zu speichern.

Mithilfe von Verschlüsselung können Sie vertrauliche Benutzerdaten (z. B. Kennwörter) schützen und Anmeldeinformationen für unbefugte Benutzer unlesbar machen. Dies kann den Diebstahl der Identität eines berechtigten Benutzers verhindern, sodass die Daten des Benutzers geschützt werden und Nichtleugnung ermöglicht wird. Mit Verschlüsselung können auch die Daten eines Benutzers vor dem Zugriff durch unbefugte Benutzer geschützt werden.

Weitere Informationen finden Sie unter Übersicht über Kryptografie.

Sicherheitshinweis:

Der Rijndael-Algorithums (jetzt als AES, Advanced Encryption Standard, bezeichnet) und der 3DES (Triple Data Encryption Standard)-Algorithmus bieten mehr Sicherheit als DES, da sie rechenintensiver sind. Weitere Informationen finden Sie unter DES und unter Rijndael.

So erstellen Sie den Verschlüsselungswrapper

  1. Fügen Sie am Anfang der Datei einen Import des Kryptografienamespaces hinzu.

    Imports System.Security.Cryptography
    
  2. Erstellen Sie eine Klasse, um die Verschlüsselungs- und Entschlüsselungsmethode zu kapseln.

    Public NotInheritable Class Simple3Des
    End Class
    
  3. Fügen Sie ein privates Feld hinzu, um den 3DES-Kryptografiedienstanbieter zu speichern.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Fügen Sie eine private Methode hinzu, die aus dem Hash des angegebenen Schlüssels ein Bytearray mit einer bestimmten Länge erstellt.

    Private Function TruncateHash( _
        ByVal key As String, _
        ByVal length As Integer) _
        As Byte()
    
        Dim sha1 As New SHA1CryptoServiceProvider
    
        ' Hash the key.
        Dim keyBytes() As Byte = _
            System.Text.Encoding.Unicode.GetBytes(key)
        Dim hash() As Byte = sha1.ComputeHash(keyBytes)
    
        ' Truncate or pad the hash.
        ReDim Preserve hash(length - 1)
        Return hash
    End Function
    
  5. Fügen Sie einen Konstruktor hinzu, um den 3DES-Kryptografiedienstanbieter zu initialisieren.

    Der key-Parameter steuert EncryptData-Methode und die DecryptData-Methode.

    Sub New(ByVal key As String)
        ' Initialize the crypto provider.
        TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8)
        TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8)
    End Sub
    
  6. Fügen Sie eine öffentliche Methode hinzu, die eine Zeichenfolge verschlüsselt.

    Public Function EncryptData( _
        ByVal plaintext As String) _
        As String
    
        ' Convert the plaintext string to a byte array.
        Dim plaintextBytes() As Byte = _
            System.Text.Encoding.Unicode.GetBytes(plaintext)
    
        ' Create the stream.
        Dim ms As New System.IO.MemoryStream
        ' Create the encoder to write to the stream.
        Dim encStream As New CryptoStream(ms, _
            TripleDes.CreateEncryptor(), _
            System.Security.Cryptography.CryptoStreamMode.Write)
    
        ' Use the crypto stream to write the byte array to the stream.
        encStream.Write(plaintextBytes, 0, plaintextBytes.Length)
        encStream.FlushFinalBlock()
    
        ' Convert the encrypted stream to a printable string.
        Return Convert.ToBase64String(ms.ToArray)
    End Function
    
  7. Fügen Sie eine öffentliche Methode hinzu, die eine Zeichenfolge entschlüsselt.

    Public Function DecryptData( _
        ByVal encryptedtext As String) _
        As String
    
        ' Convert the encrypted text string to a byte array.
        Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext)
    
        ' Create the stream.
        Dim ms As New System.IO.MemoryStream
        ' Create the decoder to write to the stream.
        Dim decStream As New CryptoStream(ms, _
            TripleDes.CreateDecryptor(), _
            System.Security.Cryptography.CryptoStreamMode.Write)
    
        ' Use the crypto stream to write the byte array to the stream.
        decStream.Write(encryptedBytes, 0, encryptedBytes.Length)
        decStream.FlushFinalBlock()
    
        ' Convert the plaintext stream to a string.
        Return System.Text.Encoding.Unicode.GetString(ms.ToArray)
    End Function
    

    Die Wrapperklasse kann jetzt zum Schützen von Benutzerdaten verwendet werden. In diesem Beispiel wird sie verwendet, um private Benutzerdaten in einer Textdatei mit öffentlichem Zugriff sicher zu speichern.

So testen Sie den Verschlüsselungswrapper

  1. Fügen Sie in einer eigenen Klasse eine Methode hinzu, die die EncryptData-Methode des Wrappers zum Verschlüsseln einer Zeichenfolge und zum Schreiben der Zeichenfolge in den Ordner Eigene Dateien des Benutzers verwendet.

    Sub TestEncoding()
        Dim plainText As String = InputBox("Enter the plain text:")
        Dim password As String = InputBox("Enter the password:")
    
        Dim wrapper As New Simple3Des(password)
        Dim cipherText As String = wrapper.EncryptData(plainText)
    
        MsgBox("The cipher text is: " & cipherText)
        My.Computer.FileSystem.WriteAllText( _
            My.Computer.FileSystem.SpecialDirectories.MyDocuments & _
            "\cipherText.txt", cipherText, False)
    End Sub
    
  2. Fügen Sie eine Methode hinzu, die die verschlüsselte Zeichenfolge aus dem Ordner Eigene Dokumente des Benutzers liest und sie mit der DecryptData-Methode des Wrappers entschlüsselt.

    Sub TestDecoding()
        Dim cipherText As String = My.Computer.FileSystem.ReadAllText( _
            My.Computer.FileSystem.SpecialDirectories.MyDocuments & _
                "\cipherText.txt")
        Dim password As String = InputBox("Enter the password:")
        Dim wrapper As New Simple3Des(password)
    
        ' DecryptData throws if the wrong password is used.
        Try
            Dim plainText As String = wrapper.DecryptData(cipherText)
            MsgBox("The plain text is: " & plainText)
        Catch ex As System.Security.Cryptography.CryptographicException
            MsgBox("The data could not be decrypted with the password.")
        End Try
    End Sub
    
  3. Fügen Sie Benutzeroberflächencode hinzu, um die TestEncoding-Methode und die TestDecoding-Methode aufzurufen.

  4. Führen Sie die Anwendung aus.

    Beachten Sie beim Testen der Anwendung, dass die Daten nicht entschlüsselt werden, wenn Sie das falsche Kennwort angeben.

Siehe auch

Konzepte

Übersicht über Kryptografie

Referenz

System.Security.Cryptography

DESCryptoServiceProvider

DES

TripleDES

Rijndael

Weitere Ressourcen

Exemplarische Vorgehensweisen für Zeichenfolgen in Visual Basic