İzlenecek yol: Visual Basic'de Dizeleri Şifreleme ve Şifresini Çözme

Bu kılavuz, Üçlü Veri Şifreleme Standardı ( ) algoritmasının şifreleme hizmeti sağlayıcısı (CSP) sürümünü kullanarak dizeleri şifrelemek ve şifresini çözmek için sınıfını nasıl DESCryptoServiceProvider TripleDES kullanabileceğinizi gösterir. İlk adım, 3DES algoritmasını kapsüller ve şifrelenmiş verileri base-64 kodlanmış dize olarak depolayan basit bir sarmalayıcı sınıfı oluşturmaktır. Ardından bu sarmalayıcı, özel kullanıcı verilerini genel olarak erişilebilen bir metin dosyasında güvenli bir şekilde depolamak için kullanılır.

Şifrelemeyi kullanarak kullanıcı gizli dizilerini (örneğin parolalar) koruyabilir ve yetkisiz kullanıcılar tarafından kimlik bilgilerinin okunamaz hale gelebilirsiniz. Bu, yetkili bir kullanıcının kimliğinin çalınmalarını koruyabilir ve bu da kullanıcının varlıklarını korur ve ret uygulamazlığı sağlar. Şifreleme ayrıca bir kullanıcının verilerine yetkisiz kullanıcılar tarafından erişilmalarını da koruyabilir.

Daha fazla bilgi için bkz. Şifreleme Hizmetleri.

Önemli

Rijndael (artık Gelişmiş Şifreleme Standardı [AES] olarak adlandırılır) ve Üçlü Veri Şifreleme Standardı (3DES) algoritmaları, işlem gücü daha yoğun olduğundan DES'ten daha fazla güvenlik sağlar. Daha fazla bilgi için DES ve Rijndael bölümlerine bakın.

Şifreleme sarmalayıcıyı oluşturmak için

  1. Şifreleme Simple3Des ve şifre çözme yöntemlerini kapsüllemek için sınıfını oluşturun.

    Public NotInheritable Class Simple3Des
    End Class
    
  2. şifreleme ad alanının içeri aktarma sınıfını içeren dosyanın başlangıcına Simple3Des ekleyin.

    Imports System.Security.Cryptography
    
  3. sınıfında, Simple3Des 3DES şifreleme hizmeti sağlayıcısını depolamak için özel bir alan ekleyin.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Belirtilen anahtarın karmasından belirtilen uzunlukta bir byte dizisi oluşturan özel bir yöntem ekleyin.

    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. 3DES şifreleme hizmeti sağlayıcısını başlatmak için bir oluşturucu ekleyin.

    parametresi key ve EncryptData yöntemlerini kontrol DecryptData eder.

    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. Bir dizeyi şifreler genel bir yöntem ekleyin.

    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. Bir dizenin şifresini çözen genel bir yöntem ekleyin.

    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
    

    Sarmalayıcı sınıfı artık kullanıcı varlıklarını korumak için kullanılabilir. Bu örnekte, özel kullanıcı verilerini genel olarak erişilebilen bir metin dosyasında güvenli bir şekilde depolamak için kullanılır.

Şifreleme sarmalayıcıyı test etmek için

  1. Ayrı bir sınıfta, bir dizeyi şifrelemek ve kullanıcının Belgelerim klasörüne yazmak için sarmalayıcının EncryptData yöntemini kullanan bir yöntem ekleyin.

    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. Kullanıcının Belgelerim klasöründen şifrelenmiş dizeyi okuyabilen ve dizenin şifresini sarmalayıcının yöntemiyle çözen bir yöntem DecryptData ekleyin.

    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. ve yöntemlerini çağıran kullanıcı arabirimi TestEncoding TestDecoding kodu ekleyin.

  4. Uygulamayı çalıştırın.

    Uygulamayı test edin, yanlış parolayı sağlarsanız verilerin şifresini çözmeyebilirsiniz.

Ayrıca bkz.