Sdílet prostřednictvím


Návod: Šifrování a dešifrování řetězců v jazyce Visual Basic

Tento návod ukazuje, jak použít DESCryptoServiceProvider třídy k šifrování a dešifrování řetězců pomocí poskytovatel metadat kryptografických (CSP) verzi Triple Data Encryption Standard (TripleDES) algoritmus.Prvním krokem je vytvoření jednoduché Obálková třída, která zapouzdřuje algoritmus 3DES a ukládá šifrovaná data jako řetězec kódováním base-64.Tento obal je použito k zabezpečenému uložení soukromých uživatelských dat v souboru veřejně přístupný text.

Šifrování můžete chránit tajemství uživatele (například hesla) a aby nečitelná pověření neoprávnění uživatelé.To lze chránit oprávněný uživatel identitu je odcizen, která chrání uživatele aktiv a poskytuje odmítnutí.Šifrování můžete také chránit data uživatele před přístupem neoprávněných uživatelů.

Další informace naleznete v tématu Šifrovací služby.

Poznámka k zabezpečeníPoznámka k zabezpečení

Rijndael (nyní označuje jako standard AES (Advanced Encryption Standard) [AES]) a algoritmus Triple Data Encryption Standard (3DES) poskytuje větší zabezpečení než algoritmus DES, protože jsou více výpočetně náročné.Další informace naleznete v tématu DES a Rijndael.

Vytvořit obálky šifrování

  1. Vytvořit Simple3Des třídy zapouzdřují metody šifrování a dešifrování.

    Public NotInheritable Class Simple3Des
    End Class
    
  2. Přidejte na začátek souboru, který obsahuje import oboru kryptografie Simple3Des třídy.

    Imports System.Security.Cryptography
    
  3. V Simple3Des třídy přidejte soukromé pole k uložení poskytovatel metadat šifrování 3DES.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Přidáte soukromá metoda, která vytvoří bajtové pole určené délky z hash zadaného klíče.

    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. Přidejte konstruktor k inicializaci poskytovatel metadat šifrování 3DES.

    key Parametr prvky EncryptData a DecryptData metod.

    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. Přidáte veřejnou metodu, která šifruje řetězec.

    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. Přidáte veřejnou metodu, která je dešifruje řetězec.

    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
    

    Obálkové třídy lze nyní chrání uživatele aktiva.V tomto příkladu se používá k zabezpečenému uložení soukromých uživatelských dat veřejně přístupné textového souboru.

Test šifrování obálky

  1. V samostatné třídě přidejte metodu, která používá Obálka EncryptData složky Dokumenty uživatele metodu šifrování řetězce a zápis pro uživatele.

    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. Přidejte metodu, která čte zašifrovaná řetězec od uživatele pro složky Dokumenty a dešifruje řetězec s Obálka 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. Přidání kódu uživatelského rozhraní pro volání TestEncoding a TestDecoding metod.

  4. Spusťte aplikaci.

    Při testování aplikace oznámení data jej nelze dešifrovat, pokud zadáte nesprávné heslo.

Viz také

Referenční dokumentace

System.Security.Cryptography

DESCryptoServiceProvider

DES

TripleDES

Rijndael

Další zdroje

Šifrovací služby