Das Verschlüsseln und Entschlüsseln einer Datei mithilfe von Visual Basic .NET oder Visual Basic 2005

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 301070 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde zuvor veröffentlicht unter D301070
Eine Microsoft Visual C# .NET Version dieses Artikels finden Sie unter 307010.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt, wie die kryptografischen Klassen verwenden, die von der Microsoft.NET Framework bereitgestellt werden. Die kryptografischen Klassen können Sie eine Textdatei unlesbaren verschlüsseln. Anschließend können Sie diese Textdatei wieder in ihr ursprüngliches Format entschlüsseln.



Anforderungen

Die folgende Liste führt die empfohlene Hardware, Software, Netzwerkinfrastruktur und Servicepacks, die Sie benötigen:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server oder Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET oder Microsoft Visual Studio 2005

Verwendung von Verschlüsselung und Entschlüsselung

Der System.Security.Cryptography-Namespace in das.NET Framework bietet eine Vielzahl von Tools, die bei der Verschlüsselung und Entschlüsselung zu unterstützen. Die CryptoStream -Klasse ist eine der vielen Klassen, die bereitgestellt wird. Die CryptoStream -Klasse dient zum Verschlüsseln oder Inhalt entschlüsseln, so, dass der Inhalt an eine Datei übertragen wird.

Gehen Sie folgendermaßen vor, um eine Datei zu verschlüsseln:
  1. Ausführen von Visual Studio .NET oder Visual Studio 2005.
  2. Erstellen Sie eine neue Konsolenanwendung in Visual Basic .NET oder Visual Basic 2005. Amodule wird zusammen mit einem leeren Main()-Prozedur für Sie erstellt.
  3. Verwenden Sie die Imports -Anweisung auf den System-Namespace, System.Security-Namespace System.Security.Cryptography-Namespace, die System.Text-Namespace und theSystem.IO-Namespace. Dies ist erforderlich, damit Sie nicht zum Qualifydeclarations aus diesen Namespaces später im Code verfügen. Sie müssen die Thesestatements vor allen anderen Deklarationen verwenden.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. Generiert einen geheimen Schlüssel zum Ver- und Entschlüsseln der Daten.DESCryptoServiceProvider -Klasse basiert auf einem symmetrischen Verschlüsselungsalgorithmus. Die symmetrische Verschlüsselung erfordert einen Schlüssel und einen Initialisierungsvektor (IV) zum Verschlüsseln von Thedata. Um die Daten zu entschlüsseln, müssen Sie die gleichen Schlüssel und IV derselben verfügen. Auch Sie verwenden denselben Verschlüsselungsalgorithmus. Sie können die Schlüssel generieren, indem Usingeither der folgenden Methoden:
    • Methode 1 Sie können den Benutzer auffordern, ein Kennwort einzugeben. Verwenden Sie dann das Kennwort als Schlüssel und IV.
    • Methode 2 Wenn Sie eine neue Instanz der symmetrischen Kryptografieklasse erstellen, werden automatisch ein neuer Schlüssel und ein neuer IV für die Sitzung erstellt. Sie können den Schlüssel und IV, die durch den verwalteten symmetrischen Kryptografieklasse zum Ver- und Entschlüsseln der Datei generiert werden.

      Weitere Informationen über das Generieren und Verteilen der Schlüssel finden Sie auf der folgenden Microsoft-Website oder finden Sie in der Dokumentation des.NET Framework Software Development Kit (SDK):

      http://msdn.Microsoft.com/en-us/library/5e9ft273 (VS
  5. Fügen Sie die folgende Funktion generiert einen neuen Schlüssel für Asession, wie in Methode 2 beschrieben:
       ' 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. Erstellen Sie in ihrer Klasse eine Methode mit dem Namen EncryptFile. Die EncryptFile -Methode muss drei Parameter:
    • sInputFile
    • sOutputFile
    • sKey (Dies ist der geheime Schlüssel, der zum Ver- und Entschlüsseln der Datei verwendet wird.)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. Erstellen Sie in der Prozedur EncryptFile ein FileStream -Eingabeobjekt und eine Ausgabe FileStream -Objekt. Diese Objekte können gelesen und in die Targetfiles geschrieben.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. Deklarieren Sie eine Instanz der DESCryptoServiceProvider -Klasse. Dies entspricht der tatsächlichen Verschlüsselung und die Actualdecryption-Technologie, die für die Dateien verwendet wird. An diesem Punkt können Sie unterschiedliche Anbieter erstellt, wenn Sie RSA Security oder eine andere Cryptographictechnique verwenden möchten.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. Der cryptographic Provider mit Schlüssel als Bytearray vorzulegen. Der System.Text-Namespace stellt eine Functionthat mit der Bezeichnung GetBytes()ist. Im Rahmen der Verschlüsselungsfeatures GetBytes() -Funktion akzeptiert eine Zeichenfolge und gibt dann ein Array von Bytes. Thesize des Schlüssels ist für jede Verschlüsselungstechnik. Data Encryption Standard (DES) führt z. B. eines 64-Bit-Schlüssels, der 8 Byte oder zum 8 Zeichen lang ist.

    Wenn Sie keinen der Anbieter Randomlygenerates einen Schlüssel angeben. Dies erfolgreich die Datei verschlüsselt hat, aber es gibt keine Todecrypt wie die Datei. Beachten Sie, dass Sie auch den Initialisierungsvektor angeben müssen. Dieser Wert ist der Verschlüsselung verwendete Aspart. IV wird wie der Schlüssel nach dem Zufallsprinzip generiert, wenn Sie den Wert eingeben. Da die Werte für Theencryption und die Entschlüsselung identisch sein müssen, müssen Sie die zufällige Generierung von Thesevalues nicht erlauben.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. Erstellen Sie eine Instanz der CryptoStream -Klasse. Den cryptographic Provider verwenden, erhalten Sie eine Encryptingobject (CreateEncryptor) sowie das vorhandene FileStream -Objekt als Teil des Konstruktors.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Lesen Sie in der Eingabedatei, und klicken Sie dann in die Ausgabedatei geschrieben. Durchlaufen des CryptoStream -Objekts, in dem die Datei verschlüsselt wird, mithilfe der Taste, Youprovided.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Um eine Datei zu entschlüsseln, gehen Sie folgendermaßen vor:
  1. Erstellen Sie eine Methode mit dem Namen DecryptFile. Der Entschlüsselungsvorgang entspricht dem Verschlüsselungsvorgang.DecryptFile hat jedoch zwei wesentliche Unterschiede bestehen die EncryptFile -Prozedur.
    • Statt CreateEncryptor dient CreateDecryptorCryptoStream -Objekt zu erstellen, das angibt, wie das Objekt verwendet werden kann.
    • Wenn des entschlüsselten Textes in die Zieldatei geschrieben werden, ist das CryptoStream -Objekt jetzt Quelldatenstrom und nicht als Zieldatenstrom.
    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. Fügen Sie die folgenden Zeilen zu der Main()-Prozedur EncryptFile und DecryptFileaufrufen .
        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. Speichern Sie die Datei. Führen Sie die Anwendung aus. Stellen Sie sicher, dass Thepath, die für die Eingabedatei Name verweist auf eine vorhandene und eine Notimportant-Datei verwendet wird.

Stellen Sie sicher, dass die Verschlüsselung und die Entschlüsselung arbeiten

Testen Sie den Code mit einer Textdatei (.txt) zu bestätigen, dass die Datei korrekt verschlüsselt und entschlüsselt wird. Stellen Sie sicher, dass die Datei in eine neue Datei (wie in der Sub Main()-Prozedur in diesem Artikel) statt mit der ursprünglichen Datei zu entschlüsseln. Überprüfen Sie die entschlüsselte Datei, und vergleichen Sie die verschlüsselte Datei mit dem Original.

Eine vollständige Codeliste

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

Informationsquellen

Weitere Informationen zum Verwenden der Kryptographiefunktionen in .NET und über Kryptographie finden Sie auf der folgenden Microsoft-Websites:

http://msdn.Microsoft.com/NET

http://Code.msdn.Microsoft.com/

Eigenschaften

Artikel-ID: 301070 - Geändert am: Samstag, 21. September 2013 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Keywords: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 301070
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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