Bagikan melalui


Panduan: Mengenkripsi dan Mendekripsi String di Visual Basic

Panduan ini menunjukkan cara menggunakan kelas DESCryptoServiceProvider untuk mengenkripsi dan mendekripsi string menggunakan versi penyedia layanan kriptografi (CSP) dari algoritma Triple Data Encryption Standard (TripleDES). Langkah pertama adalah membuat kelas pembungkus sederhana yang merangkum algoritma 3DES dan menyimpan data terenkripsi sebagai string yang dikodekan basis-64. Kemudian, pembungkus itu digunakan untuk menyimpan data pengguna pribadi dengan aman dalam file teks yang dapat diakses publik.

Anda dapat menggunakan enkripsi untuk melindungi rahasia pengguna (misalnya, kata sandi) dan untuk membuat kredensial tidak dapat dibaca oleh pengguna yang tidak sah. Enkripsi dapat melindungi identitas pengguna yang berwenang agar tidak dicuri, yang melindungi aset pengguna dan memberikan non-penyangkalan. Enkripsi juga dapat melindungi data pengguna agar tidak diakses oleh pengguna yang tidak sah.

Untuk informasi selengkapnya, lihat Layanan Kriptografi.

Penting

Algoritma Rijndael (sekarang disebut sebagai Standar Enkripsi Lanjutan [AES]) dan Triple Data Encryption Standard (3DES) memberikan keamanan yang lebih besar daripada DES karena mereka lebih intensif secara komputasi. Untuk informasi lebih lanjut, lihat DES dan Rijndael.

Untuk membuat pembungkus enkripsi

  1. Buat kelas Simple3Des untuk merangkum metode enkripsi dan dekripsi.

    Public NotInheritable Class Simple3Des
    End Class
    
  2. Tambahkan impor namespace layanan kriptografi ke awal file yang berisi kelas Simple3Des.

    Imports System.Security.Cryptography
    
  3. Di kelas Simple3Des, tambahkan bidang privat untuk menyimpan penyedia layanan kriptografi 3DES.

    Private TripleDes As New TripleDESCryptoServiceProvider
    
  4. Tambahkan metode pribadi yang membuat array byte dengan panjang tertentu dari hash kunci yang ditentukan.

    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. Tambahkan konstruktor untuk menginisialisasi penyedia layanan kriptografi 3DES.

    Parameter key mengontrol metode EncryptData dan DecryptData.

    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. Tambahkan metode publik yang mengenkripsi string.

    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. Tambahkan metode publik yang mendekripsi string.

    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
    

    Kelas pembungkus sekarang dapat digunakan untuk melindungi aset pengguna. Dalam contoh ini, kelas pembungkus digunakan untuk menyimpan data pengguna pribadi dengan aman dalam file teks yang dapat diakses publik.

Untuk menguji pembungkus enkripsi

  1. Di kelas terpisah, tambahkan metode yang menggunakan metode pembungkus EncryptData untuk mengenkripsi string dan menulisnya ke folder Dokumen Saya milik pengguna.

    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. Tambahkan metode yang membaca string terenkripsi dari folder Dokumen Saya milik pengguna dan mendekripsi string dengan metode DecryptData pembungkus.

    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. Tambahkan kode antarmuka pengguna untuk memanggil metode TestEncoding dan TestDecoding.

  4. Jalankan aplikasi lagi.

    Saat Anda menguji aplikasi, perhatikan bahwa itu tidak akan mendekripsi data jika Anda memberikan kata sandi yang salah.

Lihat juga