Overzicht: Tekenreeksen versleutelen en ontsleutelen in Visual Basic
In dit scenario ziet u hoe u de klasse gebruikt voor het DESCryptoServiceProvider versleutelen en ontsleutelen van tekenreeksen met behulp van de CSP-versie (cryptografische serviceprovider) van het algoritme Triple Data Encryption Standard (TripleDES). De eerste stap is het maken van een eenvoudige wrapperklasse die het 3DES-algoritme inkapselt en de versleutelde gegevens opslaat als een met base 64 gecodeerde tekenreeks. Vervolgens wordt die wrapper gebruikt om persoonlijke gebruikersgegevens veilig op te slaan in een openbaar toegankelijk tekstbestand.
U kunt versleuteling gebruiken om gebruikersgeheimen (bijvoorbeeld wachtwoorden) te beveiligen en referenties onleesbaar te maken door onbevoegde gebruikers. Dit kan de identiteit van een geautoriseerde gebruiker beschermen tegen diefstal, waardoor de assets van de gebruiker worden beschermd en niet-afkeer wordt geboden. Versleuteling kan de gegevens van een gebruiker ook beschermen tegen toegang door onbevoegde gebruikers.
Zie Cryptografische services voor meer informatie.
Belangrijk
De Rijndael (nu aangeduid als Advanced Encryption Standard [AES]) en Triple Data Encryption Standard (3DES) bieden meer beveiliging dan DES omdat ze rekenintensief zijn. Zie voor meer informatie DES en Rijndael.
De versleutelingswikkelaar maken
Maak de
Simple3Des
klasse om de versleutelings- en ontsleutelingsmethoden in te kapselen.Public NotInheritable Class Simple3Des End Class
Voeg een import van de cryptografienaamruimte toe aan het begin van het bestand dat de
Simple3Des
klasse bevat.Imports System.Security.Cryptography
Voeg in de
Simple3Des
klasse een privéveld toe om de cryptografische 3DES-serviceprovider op te slaan.Private TripleDes As New TripleDESCryptoServiceProvider
Voeg een persoonlijke methode toe waarmee een bytematrix van een opgegeven lengte wordt gemaakt op basis van de hash van de opgegeven sleutel.
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
Voeg een constructor toe om de cryptografische 3DES-serviceprovider te initialiseren.
De
key
parameter bepaalt deEncryptData
enDecryptData
methoden.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
Voeg een openbare methode toe waarmee een tekenreeks wordt versleuteld.
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
Voeg een openbare methode toe waarmee een tekenreeks wordt ontsleuteld.
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
De wrapper-klasse kan nu worden gebruikt om gebruikersassets te beveiligen. In dit voorbeeld wordt het gebruikt om persoonlijke gebruikersgegevens veilig op te slaan in een openbaar toegankelijk tekstbestand.
De versleutelingswikkelaar testen
Voeg in een afzonderlijke klasse een methode toe die gebruikmaakt van de methode van de wrapper
EncryptData
om een tekenreeks te versleutelen en naar de map Mijn documenten van de gebruiker te schrijven.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
Voeg een methode toe waarmee de versleutelde tekenreeks uit de map Mijn documenten van de gebruiker wordt gelezen en de tekenreeks wordt ontsleuteld met de methode van
DecryptData
de wrapper.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
Voeg code van de gebruikersinterface toe om de
TestEncoding
enTestDecoding
methoden aan te roepen.Voer de toepassing uit.
Wanneer u de toepassing test, ziet u dat de gegevens niet worden ontsleuteld als u het verkeerde wachtwoord opgeeft.