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

In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie die DESCryptoServiceProvider Klasse verwenden, um Zeichenfolgen mithilfe der Kryptografiedienstanbieter-Version (CSP) des Triple Data Encryption Standard (TripleDES) -Algorithmus zu verschlüsseln und zu entschlüsseln. Der erste Schritt besteht darin, eine einfache Wrapperklasse zu erstellen, die den 3DES-Algorithmus kapselt und die verschlüsselten Daten als Basis-64-codierte Zeichenfolge speichert. Anschließend wird dieser Wrapper verwendet, um private Benutzerdaten sicher in einer öffentlich zugänglichen Textdatei zu speichern.

Sie können verschlüsselung verwenden, um Benutzerschlüssel zu schützen (z. B. Kennwörter) und Anmeldeinformationen nicht lesbar zu machen, indem Sie nicht autorisierte Benutzer verwenden. Dies kann die Identität eines autorisierten Benutzers vor dem Gestohlenen schützen, was die Ressourcen des Benutzers schützt und keine Ablehnung bereitstellt. Verschlüsselung kann auch den Zugriff auf die Daten eines Benutzers durch unbefugte Benutzer schützen.

Weitere Informationen finden Sie unter Kryptografiedienste.

Wichtig

Die Rijndael (jetzt als Advanced Encryption Standard [AES]) und Triple Data Encryption Standard (3DES)-Algorithmen bieten mehr Sicherheit als DES, da sie mehr berechnungsintensiver sind. Weitere Informationen finden Sie unter DES und Rijndael.

So erstellen Sie den Verschlüsselungsumbruch

  1. Erstellen Sie die Klasse, um die Simple3Des Verschlüsselungs- und Entschlüsselungsmethoden zu kapselen.

    Public NotInheritable Class Simple3Des
    End Class
    
  2. Fügen Sie dem Anfang der Datei, die die Simple3Des Klasse enthält, einen Import des Kryptografie-Namespaces hinzu.

    Imports System.Security.Cryptography
    
  3. Fügen Sie in der Simple3Des Klasse ein privates Feld hinzu, um den 3DES-Kryptografiedienstanbieter zu speichern.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Fügen Sie eine private Methode hinzu, die ein Bytearray einer angegebenen Länge aus dem Hash des angegebenen Schlüssels 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 die und DecryptData methodenEncryptData.

    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 verwendet werden, um Benutzerressourcen zu schützen. In diesem Beispiel wird es verwendet, um private Benutzerdaten sicher in einer öffentlich zugänglichen Textdatei zu speichern.

So testen Sie den Verschlüsselungsumbruch

  1. Fügen Sie in einer separaten Klasse eine Methode hinzu, die die Wrappermethode EncryptData verwendet, um eine Zeichenfolge zu verschlüsseln und in den Ordner "Meine Dokumente" des Benutzers zu schreiben.

    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 "Meine Dokumente" des Benutzers liest und die Zeichenfolge mit der Wrapper-Methode DecryptData 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 TestEncodingTestDecoding Methoden aufzurufen.

  4. Führen Sie die Anwendung aus.

    Wenn Sie die Anwendung testen, beachten Sie, dass die Daten nicht entschlüsselt werden, wenn Sie das falsche Kennwort angeben.

Weitere Informationen