Как зашифровать и расшифровать файл с помощью Visual Basic.NET или Visual Basic 2005

Переводы статьи Переводы статьи
Код статьи: 301070 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft Visual C#.NET версии статьи, см. 307010.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается использование криптографических классов предоставляемые корпорацией Майкрософт.NET Framework. Использование криптографии классы для текстового файла, который не удается прочитать состояние шифрования. После этого можно расшифровать Этот текстовый файл обратно в его исходном формате.



Требования

В следующем списке представлены рекомендуемого оборудования, программного обеспечения, сетевой инфраструктуры и пакетов обновления, необходимо иметь:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server корпорация Майкрософт Windows 2000 Advanced Server или Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio.NET или Microsoft Visual Studio 2005

Использовать шифрование и расшифровка

В пространстве имен System.Security.Cryptographic.NET Framework предоставляет широкий набор средств, помогающих в шифрования и расшифровки. В CryptoStream класс является одной из многих классов, которые предоставляются. В CryptoStream класс предназначен для шифрования и расшифровки содержимого, что для потоковой передачи содержимого выход в файл.

Чтобы зашифровать файл, выполните следующие действия:
  1. Запустите Visual Studio.NET или Visual Studio 2005.
  2. Создайте новое консольное приложение в Visual Basic.NET или Visual Basic 2005. A модуль будет создана, вместе с пустой Main() процедура.
  3. Использование Импортируемые пространства имен оператор в пространстве имен System, пространство имен System.Security пространство имен System.Security.Cryptography, пространство имен System.Text и Пространство имен System.IO. Это необходимо сделать таким образом, нет необходимости уточнять объявления из этих пространств имен в коде. Необходимо использовать эти инструкции перед любыми объявлениями.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. Создает секретный ключ для шифрования и расшифровки данных. В DESCryptoServiceProvider класс основан на алгоритме симметричного шифрования. Симметричный шифрование требует ключ и вектор инициализации (IV) для шифрования данные. Для расшифровки данных, должен иметь тот же ключ и вектор Инициализации же. Вы должны также можно используйте один и тот же алгоритм шифрования. Можно создавать ключи с помощью одним из следующих способов:
    • Способ 1 Можно запросить у пользователя пароль. Затем с помощью пароля, как ключ и вектор Инициализации.
    • Способ 2 При создании нового экземпляра симметричного шифрования классы, новый ключ и новый вектор Инициализации, автоматически создаются для сеанса. Вы можно использовать ключ и вектор Инициализации, создаваемых с управляемыми симметричный криптографические классы для шифрования и расшифровки файла.

      Для получения дополнительных сведения о том, как создавать и распространять ключи, посетите веб- Веб-узел корпорации Майкрософт или см.NET Framework пакет средств разработки программного обеспечения (SDK) документация:

      http://MSDN.Microsoft.com/en-us/library/5e9ft273 (VS.71) .aspx
  5. Добавьте следующую функцию для создания нового ключа для сеанс, как указано в способе 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. Создание метода в класс с именем EncryptFile. В EncryptFile метод должен иметь три параметра:
    • sInputFile
    • sOutputFile
    • sKey (Это секретный ключ, используемый для шифрования и расшифровки файл.)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. В EncryptFile процедуры, создание входных данных FileStream объект и выход FileStream объект. Эти объекты, которые можно читать и записывать цели файлы.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. Объявите экземпляр DESCryptoServiceProvider класс. Это представляет фактическое шифрование и фактического Технология дешифрование, используемый для файлов. На этом этапе можно создать Если вы хотите использовать безопасности RSA или другой криптографический поставщика прием.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. Поставщик служб шифрования должен предоставить свой секретный ключ в виде массива байтов. Пространство имен System.Text предоставляет функцию с именем GetBytes(). Как часть своих функций кодирования GetBytes() функция принимает строку и возвращает массив байтов. В размер ключа, отличается для каждого криптографический метод. Например, Стандартная DES (Data Encryption) занимает 64-разрядный ключ, который равен 8 байтам или до 8 символов.

    Если не ввести ключ, поставщик случайным образом генерирует его. Это успешно шифрует файл, но не предусмотрена для расшифровать файл. Следует иметь в виду, также необходимо предоставить вектор Инициализации. Это значение используется как часть шифрования. Как ключ и вектор Инициализации генерируется случайным образом Если сделать Предоставляет значение. Поскольку значения должны быть одинаковыми для обоих шифрование и расшифровка должны не разрешают случайных этих значения.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. Создание экземпляров CryptoStream класс. Получить шифрование с помощью поставщика служб шифрования объект)CreateEncryptor) и существующих вывода FileStream объект является частью конструктора.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Чтение во входном файле и затем запись в вывод файл. Пройти CryptoStream Объект, когда файл был зашифрован с помощью ключа, которые предоставляемые.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Для расшифровки файла, выполните следующие действия.
  1. Создайте метод с именем DecryptFile. Процесс расшифровки похож на процесс шифрования. Тем не менее, DecryptFile есть два основных отличия от EncryptFile процедура.
    • CreateDecryptor используется вместо CreateEncryptor для создания CryptoStream Объект, указывающий, как можно использовать объект.
    • При записи расшифрованный текст в место назначения файл, CryptoStream объект теперь является источником, а не место назначения поток.
    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. Добавьте следующие строки в Main() процедуры для вызова как EncryptFile и 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. Сохраните файл. Запустите приложение. Убедитесь, что путь, используемый для точек имя входного файла уже существует и не важный файл.

Убедитесь, что шифрование и расшифровка работать

Проверки кода с файлом текста (txt) и убедитесь, что файл правильно шифруются и дешифруются. Убедитесь, что расшифровать файл новый файл (как в Sub Main() в этой статье процедуры) вместо того, чтобы в исходном файле. Изучите расшифрованного файла и сравнение расшифрованного файла оригинальный.

Полный код список

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

Ссылки

Для получения дополнительных сведений об использовании шифрования функции.NET, а также о криптографии, посетите следующий веб-узла корпорации Майкрософт сайты:

http://MSDN.Microsoft.com/NET

http://Code.MSDN.Microsoft.com/

Свойства

Код статьи: 301070 - Последний отзыв: 5 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Ключевые слова: 
kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster kbmt KB301070 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:301070

Отправить отзыв

 

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