Wskazówki: szyfrowanie i odszyfrowywanie ciągów w Visual Basic

W tym instruktażu przedstawiono sposób użycia DESCryptoServiceProvider klasy do szyfrowania i odszyfrowywania ciągów przy użyciu usługodawca kryptograficzny (CSP) wersję Triple Data Encryption Standard (TripleDES) algorytm.Pierwszym krokiem jest utworzenie klasy otoki proste, która hermetyzuje algorytm 3DES i przechowywane są zaszyfrowane dane jako ciąg zakodowany base-64.Następnie że otoki jest używany do bezpiecznego przechowywania prywatnych danych użytkownika w pliku tekstowym publicznie dostępne.

Można użyć szyfrowania, aby chronić tajemnice użytkownika (na przykład hasła) i aby poświadczenia nie do odczytania przez nieautoryzowanych użytkowników.Może to ochronę tożsamości autoryzowanego użytkownika przed kradzieżą, która chroni użytkownika aktywów i zapewnia wyłączność.Szyfrowanie może również ochrony danych użytkownika przed dostępem nieautoryzowanych użytkowników.

Aby uzyskać więcej informacji, zobacz Usługi kryptograficzne.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Rijndael (teraz dalej Advanced Encryption Standard [AES]) i algorytmy Triple Data Encryption Standard (3DES) zapewniają większe bezpieczeństwo niż algorytm DES, ponieważ są one bardziej obliczeniowo.Aby uzyskać więcej informacji, zobacz DES i Rijndael.

Do tworzenia otoki szyfrowania

  1. Tworzenie Simple3Des klasa do hermetyzowania metody szyfrowania i odszyfrowywania.

    Public NotInheritable Class Simple3Des
    End Class
    
  2. Dodać importowania nazw kryptografii do początku pliku, który zawiera Simple3Des klasy.

    Imports System.Security.Cryptography
    
  3. W Simple3Des klasy, Dodaj pole private do przechowywania usługodawca kryptograficzny algorytm 3DES.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Dodawanie prywatnego metoda, która tworzy tablicy bajtowej o określonej długości, z hasza określonego klucza.

    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. Dodaj Konstruktor zainicjować usługodawca kryptograficzny algorytm 3DES.

    key Parametr formantów EncryptData i DecryptData metody.

    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. Dodać publicznych metoda, która szyfruje ciąg.

    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. Dodać publiczna metoda odszyfrowujący ciąg.

    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
    

    Aby chronić zasoby użytkownika można teraz klasy otoki.W tym przykładzie jest używany do bezpiecznego przechowywania prywatnych danych użytkownika w pliku tekstowym publicznie dostępne.

Aby przetestować otoki szyfrowania

  1. W osobnej klasy, należy dodać metodę, która używa opakowania EncryptData metoda szyfrowania ciągu i zapisać go do użytkownika w folderze Moje dokumenty.

    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. Dodać metodę, która odczytuje ciąg zaszyfrowanych przez użytkownika w folderze Moje dokumenty i odszyfrowuje ciąg z otoką DecryptData metoda.

    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. Dodaj kod interfejsu użytkownika do wywołania TestEncoding i TestDecoding metody.

  4. Uruchom aplikację.

    Podczas testowania aplikacji, należy zauważyć, że to będzie nie odszyfrować dane, jeśli złe hasło.

Zobacz też

Informacje

System.Security.Cryptography

DESCryptoServiceProvider

DES

TripleDES

Rijndael

Inne zasoby

Usługi kryptograficzne