Cara mengenkripsi dan mendekripsi berkas dengan menggunakan Visual Basic.NET atau Visual Basic 2005

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 301070 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual C#.NET versi ini Pasal, lihat 307010.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjelaskan cara menggunakan kriptografi kelas yang disediakan oleh Microsoft.NET Framework. Anda dapat menggunakan kriptografi kelas untuk mengenkripsi file teks ke keadaan tidak terbaca. Kemudian, Anda dapat mendekripsi file teks itu kembali ke format asli.



Persyaratan

Daftar berikut menguraikan fitur perangkat keras, perangkat lunak, jaringan infrastruktur, dan paket layanan yang Anda harus:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, atau Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio.NET atau Microsoft Visual Studio 2005

Penggunaan enkripsi dan dekripsi

System.Security.Cryptographic namespace dalam.NET Framework menyediakan berbagai alat untuk membantu dalam enkripsi dan dekripsi. The CryptoStream kelas adalah salah satu dari banyak kelas yang disediakan. The CryptoStream kelas ini dirancang untuk mengenkripsi atau mendekripsi konten sebagai yang isi mengalir keluar ke file.

Mengenkripsi berkas, ikuti langkah-langkah:
  1. Menjalankan Visual Studio.NET atau Visual Studio 2005.
  2. Membuat aplikasi konsol baru dalam Visual Basic.BERSIH atau pada Visual Basic 2005. A modul ini dibuat untuk Anda, bersama dengan kosong Main() prosedur.
  3. Penggunaan Impor pernyataan pada sistem namespace, System.Security namespace, System.Security.Cryptography namespace, System.Text namespace, dan System.io namespace. Anda harus melakukan hal ini sehingga Anda tidak harus memenuhi syarat Deklarasi dari namespaces ini kemudian dalam kode Anda. Anda harus menggunakan ini pernyataan sebelum deklarasi lain.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. Menghasilkan kunci rahasia untuk mengenkripsi dan mendekripsi data. The DESCryptoServiceProvider kelas ini didasarkan pada algoritma enkripsi simetris. Simetris enkripsi memerlukan kunci dan vektor inisialisasi (IV) untuk mengenkripsi data. Untuk mendekripsi data, Anda harus memiliki tombol yang sama dan IV sama. Anda harus juga menggunakan algoritma enkripsi yang sama. Anda dapat menghasilkan kunci dengan menggunakan salah satu metode berikut:
    • Metode 1 Anda dapat meminta pengguna untuk password. Kemudian, gunakan sandi sebagai kunci dan IV.
    • Metode 2 Ketika Anda membuat contoh baru dari simetris kriptografi kelas, kunci baru dan IV baru secara otomatis dibuat untuk sesi. Anda dapat menggunakan tombol dan IV yang dihasilkan oleh dikelola simetris kriptografi kelas untuk mengenkripsi dan mendekripsi berkas.

      Untuk lebih informasi tentang cara untuk menghasilkan dan mendistribusikan kunci, kunjungi berikut Situs Web Microsoft atau lihat.NET Framework software development kit (SDK) Dokumentasi:

      .aspx http://MSDN.Microsoft.com/en-us/library/5e9ft273 (VS.71)
  5. Tambahkan fungsi berikut untuk menghasilkan sebuah kunci baru untuk sesi seperti tercantum dalam metode 2:
       ' Call this function to remove the key from memory after it is used for security.
       Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" _
                         (ByVal Destination As String, ByVal Length As Integer)
       
       ' Function to generate a key.
       Function GenerateKey() As String
          ' Create an instance of Symmetric Algorithm. The key and the IV are generated automatically.
          Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()
    
          ' Use the automatically generated key for encryption. 
          Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)
       End Function 
  6. Menciptakan metode di kelas Anda yang bernama EncryptFile. The EncryptFile metode harus memiliki tiga parameter:
    • sInputFile
    • sOutputFile
    • sKey (Ini adalah kunci rahasia yang digunakan untuk mengenkripsi dan mendekripsi» berkas.)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. Dalam EncryptFile prosedur, membuat input FileStream objek dan output FileStream objek. Objek ini dapat dibaca dari dan ditulis ke target file.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. Menyatakan contoh DESCryptoServiceProvider kelas. Ini mewakili enkripsi sebenarnya dan sebenarnya dekripsi teknologi yang digunakan pada file. Pada titik ini, Anda dapat membuat penyedia berbeda jika Anda ingin menggunakan RSA security atau lain kriptografi teknik.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. Penyedia kriptografi harus disediakan dengan Anda kunci rahasia sebagai array byte. System.Text namespace menyediakan fungsi yang dinamakan GetBytes(). Sebagai bagian dari fitur encoding, GetBytes() fungsi string yang diperlukan dan kemudian mengembalikan array byte. The ukuran tombol berbeda untuk setiap teknik kriptografi. Sebagai contoh, Data Encryption Standard (DES) mengambil 64-bit kunci yang sama dengan 8 byte atau untuk 8 karakter.

    Jika Anda tidak memberikan kunci, penyedia secara acak menghasilkan satu. Ini berhasil mengenkripsi file, tetapi ada cara untuk mendekripsi berkas. Catatan bahwa Anda juga harus memberikan IV. Nilai ini digunakan sebagai bagian dari enkripsi. Seperti tombol, IV acak yang dihasilkan jika Anda melakukan tidak memberikan nilai. Karena nilai-nilai harus sama untuk kedua enkripsi dan dekripsi, Anda harus tidak mengijinkan acak generasi ini nilai-nilai.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. Membuat sebuah instance dari CryptoStream kelas. Menggunakan penyedia kriptografi untuk mendapatkan enkripsi objek)CreateEncryptor) dan output ada FileStream objek sebagai bagian dari konstruktor.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Membaca di input file, dan kemudian menulis output file. Melewati CryptoStream objek di mana file telah dienkripsi dengan menggunakan tombol yang Anda disediakan.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Untuk mendekripsi berkas, ikuti langkah berikut:
  1. Menciptakan metode yang bernama DecryptFile. Proses dekripsi ini mirip dengan proses enkripsi. Namun, DecryptFile memiliki dua perbedaan utama dari EncryptFile prosedur.
    • CreateDecryptor digunakan sebagai pengganti CreateEncryptor untuk membuat CryptoStream objek yang menentukan cara objek dapat digunakan.
    • Ketika teks didekripsi ditulis ke tujuan file, CryptoStream objek sekarang adalah sumber bukan tujuan streaming.
    Sub DecryptFile(ByVal sInputFilename As String, _
        ByVal sOutputFilename As String, _
        ByVal sKey As String)
    
        Dim DES As New DESCryptoServiceProvider()
        'A 64-bit key and an IV are required for this provider.
        'Set secret key for DES algorithm.
        DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
        'Set initialization vector.
        DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    
        'Create a file stream to read the encrypted file back.
        Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
        'Create a DES Decryptor from your DES instance.
        Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
        'Create a crypto stream set to read and to do a DES decryption transform on incoming bytes.
        Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
        'Print out the contents of the decrypted file.
        Dim fsDecrypted As New StreamWriter(sOutputFilename)
        fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
        fsDecrypted.Flush()
        fsDecrypted.Close()
    End Sub
    					
  2. Tambahkan baris berikut ke Main() prosedur untuk memanggil kedua EncryptFile dan DecryptFile.
        Public Sub Main()      'Must be 64 bits, 8 bytes.
          Dim sSecretKey As String
    
          ' Get the key for the file to encrypt.
          ' You can distribute this key to the user who will decrypt the file.
          sSecretKey = GenerateKey()
    
          ' For additional security, pin the key.
          Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)
    
    
          ' Encrypt the file.        
          EncryptFile("%USERPROFILE%\MyData.txt", _
                          "%USERPROFILE%\Encrypted.txt", _
                          sSecretKey)
    
          ' Decrypt the file.
          DecryptFile("%USERPROFILE%\Encrypted.txt", _
                      "%USERPROFILE%\Decrypted.txt", _
                      sSecretKey)
    
          ' Remove the key from memory.
          ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
          gch.Free()
       End Sub
  3. Simpan berkas tersebut. Menjalankan aplikasi Anda. Pastikan bahwa jalan yang digunakan untuk nama input file poin untuk yang sudah ada dan tidak file penting.

Memverifikasi bahwa enkripsi dan dekripsi bekerja

Menguji kode ini dengan file teks (.txt) untuk mengkonfirmasi bahwa berkas dengan benar dienkripsi dan didekripsi. Pastikan bahwa Anda mendekripsi berkas file baru (seperti dalam Sub Main() prosedur dalam artikel ini) bukan ke file asli. Memeriksa dekripsi file dan membandingkan dekripsi file untuk asli.

Daftar kode lengkap

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Cryptography
Imports System.Runtime.InteropServices
Imports System.Text


Module Module1

   ' Call this function to remove the key from memory after it is used for security.
   <DllImport("kernel32.dll")> _
   Public Sub ZeroMemory(ByVal addr As IntPtr, ByVal size As Integer)
   End Sub

   ' Function to generate a 64-bit key.
   Function GenerateKey() As String
      ' Create an instance of a symmetric algorithm. The key and the IV are generated automatically.
      Dim desCrypto As DESCryptoServiceProvider = DESCryptoServiceProvider.Create()

      ' Use the automatically generated key for encryption. 
      Return ASCIIEncoding.ASCII.GetString(desCrypto.Key)

   End Function

   Sub EncryptFile(ByVal sInputFilename As String, _
                  ByVal sOutputFilename As String, _
                  ByVal sKey As String)

      Dim fsInput As New FileStream(sInputFilename, _
                                  FileMode.Open, FileAccess.Read)
      Dim fsEncrypted As New FileStream(sOutputFilename, _
                                  FileMode.Create, FileAccess.Write)

      Dim DES As New DESCryptoServiceProvider()

      'Set secret key for DES algorithm.
      'A 64-bit key and an IV are required for this provider.
      DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Set the initialization vector.
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Create the DES encryptor from this instance.
      Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
      'Create the crypto stream that transforms the file stream by using DES encryption.
      Dim cryptostream As New CryptoStream(fsEncrypted, _
                                          desencrypt, _
                                          CryptoStreamMode.Write)

      'Read the file text to the byte array.
      Dim bytearrayinput(fsInput.Length - 1) As Byte
      fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
      'Write out the DES encrypted file.
      cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
      cryptostream.Close()
   End Sub

   Sub DecryptFile(ByVal sInputFilename As String, _
       ByVal sOutputFilename As String, _
       ByVal sKey As String)

      Dim DES As New DESCryptoServiceProvider()
      'A 64-bit key and an IV are required for this provider.
      'Set the secret key for the DES algorithm.
      DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
      'Set the initialization vector.
      DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)

      'Create the file stream to read the encrypted file back.
      Dim fsread As New FileStream(sInputFilename, FileMode.Open, FileAccess.Read)
      'Create the DES decryptor from the DES instance.
      Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
      'Create the crypto stream set to read and to do a DES decryption transform on incoming bytes.
      Dim cryptostreamDecr As New CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read)
      'Print out the contents of the decrypted file.
      Dim fsDecrypted As New StreamWriter(sOutputFilename)
      fsDecrypted.Write(New StreamReader(cryptostreamDecr).ReadToEnd)
      fsDecrypted.Flush()
      fsDecrypted.Close()
   End Sub

   Public Sub Main()
      'Must be 64 bits, 8 bytes.
      Dim sSecretKey As String

      ' Get the key for the file to encrypt.
      ' You can distribute this key to the user who will decrypt the file.
      sSecretKey = GenerateKey()

      ' For additional security, pin the key.
      Dim gch As GCHandle = GCHandle.Alloc(sSecretKey, GCHandleType.Pinned)


      ' Encrypt the file.        
      EncryptFile("%USERPROFILE%\MyData.txt", _
                      "%USERPROFILE%\Encrypted.txt", _
                      sSecretKey)

      ' Decrypt the file.
      DecryptFile("%USERPROFILE%\Encrypted.txt", _
                  "%USERPROFILE%\Decrypted.txt", _
                  sSecretKey)

      ' Remove the key from memory. 
      ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2)
      gch.Free()
   End Sub

End Module

REFERENSI

Untuk informasi lebih lanjut tentang bagaimana menggunakan kriptografi fitur.NET dan tentang kriptografi, kunjungi Website Microsoft berikut situs:

http://MSDN.Microsoft.com/net

http://code.msdn.Microsoft.com/

Properti

ID Artikel: 301070 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Kata kunci: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:301070

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com