Jak šifrovat a dešifrovat soubor pomocí jazyka Visual Basic .NET nebo Visual Basic 2005

Překlady článku Překlady článku
ID článku: 301070 - Produkty, které se vztahují k tomuto článku.
Microsoft Visual C# .NET verzi tohoto článek naleznete v tématu 307010.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Tento článek popisuje způsob použití třídy kryptografie jsou k dispozici v Microsoft rozhraní.NET Framework. Slouží šifrování třídy k šifrování souboru text nečitelný státu. Potom může dešifrovat Tento textový soubor zpět na původní formát.



Požadavky

Následující seznam obsahuje doporučený hardware, software, síťovou infrastrukturu a aktualizace service Pack musíte mít:
  • Microsoft Windows XP a Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Systém Windows 2000 Advanced Server nebo Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET nebo Microsoft Visual Studio 2005

Použití šifrování a dešifrování

System.Security.Cryptographic obor názvů v rozhraní.NET Framework obsahuje řadu nástrojů pro podporu šifrování a dešifrování. Třída CryptoStream je jedním z mnoha tříd, které je k dispozici. Třída CryptoStream je určen k šifrování nebo dešifrování obsahu, který obsah proudem ven do souboru.

Chcete-li zašifrovat soubor, postupujte podle těchto pomocí následujících kroků:
  1. Spusťte aplikaci Visual Studio .NET nebo Visual Studio 2005.
  2. Vytvoření nové aplikace konzoly v jazyce Visual Basic .NET nebo Visual Basic 2005. A modul je vytvořen, spolu s prázdné procedury Main() .
  3. Pomocí příkazu Imports v oboru názvů System oboru názvů System.Security obor názvů System.Security.Cryptography, názvů System.Text a Obor názvů System.IO. Bude třeba provést tak, že nemáte nárok deklarace z těchto oborů názvů později v kódu. Je nutné použít tyto příkazy před všemi ostatními deklaracemi.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. Tajný klíč k šifrování a dešifrování dat generovat. DESCryptoServiceProvider třída je založena na algoritmu symetrického šifrování. Symetrické vyžaduje šifrování klíče a inicializační vektor (IV) k zašifrování data. K dešifrování dat, musí mít stejný klíč a IV stejné. Je nutné také pomocí stejného algoritmu šifrování. Můžete vygenerovat pomocí klíče některou z následujících metod:
    • Metoda 1 Můžete vyzvat uživatele k zadání hesla. Potom pomocí hesla jako klíče a IV.
    • Metoda 2 Při vytváření nové instance symetrické šifrování třídy, nový klíč a nový IV jsou automaticky vytvořeny relace. Je můžete použít klíč a IV, které jsou generovány pomocí spravovanou symetrické kryptografické třídy k šifrování a dešifrování souboru.

      Pro další informace informace o způsobu generování a distribuce klíčů, naleznete na následujícím Webový server společnosti Microsoft nebo v tématu rozhraní.NET Framework software development kit (SDK) dokumentace:

      http://msdn.microsoft.com/en-us/library/5e9ft273 (VS.71) .aspx
  5. Přidat následující funkce generovat nový klíč pro relace, jak je uvedeno v metodě 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. Vytvořte metodu ve třídě s názvem EncryptFile. Metoda EncryptFile musí mít tři parametry:
    • sInputFile
    • sOutputFile
    • sKey (To je tajný klíč používaný k šifrování a dešifrování Soubor).
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. V EncryptFile postup vytvořit vstupní objekt FileStream a výstup FileStream objekt. Tyto objekty lze číst a zapisovat do cílového soubory.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. Deklarujte instanci DESCryptoServiceProvider třída. To představuje skutečné šifrování a skutečné dešifrování technologií, který je použit pro soubory. V tomto okamžiku můžete vytvořit Pokud chcete použít zabezpečení RSA nebo jiného kryptografického jiného zprostředkovatele technika.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. Musí být vybaveny zprostředkovatele kryptografických služeb vaší tajný klíč jako pole bajtů. Obor názvů System.Text poskytuje funkce s názvem GetBytes(). Jako součást jeho kódování funkce funkci GetBytes() přijímá řetězec a vrátí pole bajtů. Na velikost klíče je různá pro každý šifrovací postup. Například, Data Encryption (Standard DES) trvá 64bitový klíč, který je roven 8 bajtů nebo 8 znaků.

    Pokud nezadáte náhodně klíč zprostředkovatele generuje jeden. To úspěšně zašifruje soubor, ale neexistuje žádný způsob, jak Soubor dešifrujte. Všimněte si, že je také nutné zadat IV. Tato hodnota slouží jako část šifrování. Jako klíč IV náhodně generován, pokud je neobsahuje hodnotu. Vzhledem k tomu, že hodnoty musí být stejné pro oba šifrování a dešifrování nesmí dovolit náhodné generování těchto hodnoty.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. Vytvořte instanci třídy CryptoStream . Použití zprostředkovatele kryptografických služeb k získání šifrování objekt (CreateEncryptor) a stávající výstup FileStream objekt jako součást konstruktoru.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Čtení vstupního souboru a zapsání do výstupu PST. Průchod CryptoStream objektu kde soubor je šifrován pomocí klíče, které k dispozici.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Chcete-li dešifrovat nějaký soubor, postupujte takto:
  1. Vytvořte metodu s názvem DecryptFile. Proces dešifrování je podobný procesu šifrování. Dva hlavní rozdíly v EncryptFile postup má však DecryptFile .
    • CreateDecryptor slouží namísto CreateEncryptorCryptoStream objektu, který určuje, jakým způsobem lze použít objekt vytvořit.
    • Při zápisu dešifrované text do cílového umístění soubor objektu CryptoStream je nyní zdroj, místo určení datový proud.
    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. Přidejte následující řádky na Main() postup volání EncryptFile a 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. Uložte soubor. Spusťte aplikaci. Ujistěte se, že cesta, která se používá pro body název vstupního souboru a existující a nikoli důležitý soubor.

Ověřte, že šifrování a dešifrování práce

Testování tento kód textového souboru (TXT) potvrdit, že soubor správně zašifrovat a dešifrovat. Ujistěte se, že dešifrování souboru, který má nový soubor (viz Sub Main() postup v tomto článku) namísto původního souboru. Prohlédněte si dešifrovaný soubor a porovnat dešifrovaný soubor původní.

Kompletní seznam kódu

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

Odkazy

Další informace o použití šifrovacího prostředku Funkce rozhraní .NET a o kryptografii, navštivte následující Web společnosti Microsoft weby:

http://msdn.microsoft.com/NET

http://code.msdn.microsoft.com/

Vlastnosti

ID článku: 301070 - Poslední aktualizace: 1. července 2013 - Revize: 8.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Klíčová slova: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 301070

Dejte nám zpětnou vazbu

 

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