Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie die TripleDES Klasse zum Verschlüsseln und Entschlüsseln von Zeichenfolgen mithilfe des 3DES-Algorithmus (Triple Data Encryption Standard) verwenden. Der erste Schritt besteht darin, eine einfache Wrapperklasse zu erstellen, die den 3DES-Algorithmus kapselt und die verschlüsselten Daten als base-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 geheime Benutzerschlüssel (z. B. Kennwörter) zu schützen und anmeldeinformationen von nicht autorisierten Benutzern unlesbar zu machen. Dies kann die Identität eines autorisierten Benutzers davor schützen, gestohlen zu werden, was die Ressourcen des Benutzers schützt und eine Nichtabstreitbarkeit bietet. Verschlüsselung kann auch den Zugriff auf die Daten eines Benutzers durch nicht autorisierte Benutzer schützen.
Weitere Informationen finden Sie unter Kryptografiedienste.
Von Bedeutung
Die Algorithmen Rijndael (jetzt als Advanced Encryption Standard [AES]) bezeichnet) und Triple Data Encryption Standard (3DES) bieten eine höhere Sicherheit als DES, da sie rechenintensiver sind. Weitere Informationen finden Sie unter DES und Rijndael.
So erstellen Sie den Verschlüsselungswrapper
Erstellen Sie die
Simple3DesKlasse, um die Verschlüsselungs- und Entschlüsselungsmethoden zu kapseln.Public NotInheritable Class Simple3Des End ClassFügen Sie am Anfang der Datei, die die
Simple3DesKlasse enthält, einen Import des Kryptografienamespaces hinzu.Imports System.Security.CryptographyFügen Sie in der
Simple3DesKlasse private Felder hinzu, um den 3DES-Kryptografiedienstanbieter, den angegebenen Schlüssel und die Formatversion, die Salzgröße und die Iterationsanzahl zu speichern.Private TripleDes As TripleDES = TripleDES.Create() Private Const FormatVersion As Byte = 1 Private Const SaltSize As Integer = 16 Private Const Iterations As Integer = 600000 Private ReadOnly Key As StringFügen Sie eine private Methode hinzu, die ein Bytearray aus dem angegebenen Schlüssel und einem Salz erstellt.
Private Function DeriveKey(ByVal salt() As Byte) As Byte() ' Derive a key from the specified key and the salt. Using kdf As New Rfc2898DeriveBytes( Key, salt, Iterations, HashAlgorithmName.SHA256) Return kdf.GetBytes(TripleDes.KeySize \ 8) End Using End FunctionFügen Sie einen Konstruktor hinzu, der den angegebenen Schlüssel speichert.
Der
keyParameter steuert dieEncryptDataundDecryptDataMethoden.Sub New(ByVal key As String) ' Store the key. The encryption key and IV are created per message. Me.Key = key End SubFügen Sie eine öffentliche Methode hinzu, die eine Zeichenfolge verschlüsselt.
Public Function EncryptData( ByVal plaintext As String) As String ' Create a new salt and initialization vector for this message. Dim salt(SaltSize - 1) As Byte Using rng As RandomNumberGenerator = RandomNumberGenerator.Create() rng.GetBytes(salt) End Using TripleDes.Key = DeriveKey(salt) TripleDes.GenerateIV() ' 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 ' Write the format version, salt, and initialization vector in front of ' the cipher text. The version identifies the salt length and iteration count. ms.WriteByte(FormatVersion) ms.Write(salt, 0, salt.Length) ms.Write(TripleDes.IV, 0, TripleDes.IV.Length) ' 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 FunctionFü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) ' Read the header that precedes the cipher text. Only one format ' version exists, so reject anything else. Dim ivSize As Integer = TripleDes.BlockSize \ 8 Dim headerSize As Integer = 1 + SaltSize + ivSize If encryptedBytes.Length < headerSize OrElse encryptedBytes(0) <> FormatVersion Then Throw New CryptographicException( "The encrypted data is not in the expected format.") End If Dim salt(SaltSize - 1) As Byte Dim iv(ivSize - 1) As Byte Array.Copy(encryptedBytes, 1, salt, 0, SaltSize) Array.Copy(encryptedBytes, 1 + SaltSize, iv, 0, ivSize) TripleDes.Key = DeriveKey(salt) TripleDes.IV = iv ' 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, headerSize, encryptedBytes.Length - headerSize) decStream.FlushFinalBlock() ' Convert the plaintext stream to a string. Return System.Text.Encoding.Unicode.GetString(ms.ToArray) End FunctionDie Wrapperklasse kann jetzt zum Schutz von Benutzerressourcen verwendet werden. In diesem Beispiel wird es verwendet, um private Benutzerdaten sicher in einer öffentlich zugänglichen Textdatei zu speichern.
So testen Sie den Verschlüsselungswrapper
Fügen Sie in einer separaten Klasse eine Methode hinzu, die die Wrappermethode
EncryptDataverwendet, um eine Zeichenfolge zu verschlüsseln und in den Ordner "Eigene 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 SubFügen Sie eine Methode hinzu, die die verschlüsselte Zeichenfolge aus dem Ordner "Eigene Dokumente" des Benutzers liest und die Zeichenfolge mit der Wrappermethode
DecryptDataentschlü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 SubFügen Sie Benutzeroberflächencode hinzu, um die Methoden
TestEncodingundTestDecodingaufzurufen.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.