В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

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

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:301070
Для Microsoft Visual C#.NET версии статьи, см. 307010.
В данной статье относится к следующим Microsoft.NET Пространства имен библиотеки классов Framework:
  • System.IO
  • System.Security
  • System.Security.Cryptography

В ЭТОЙ ЗАДАЧЕ

Аннотация
В данной статье описывается использование криптографических классов предоставляемые корпорацией Майкрософт.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 SystemImports System.IOImports System.SecurityImports System.Security.CryptographyImports System.Runtime.InteropServicesImports 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 BytefsInput.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() в этой статье процедуры) вместо того, чтобы в исходном файле. Изучите расшифрованного файла и сравнение расшифрованного файла оригинальный.

к началу статьи TOP

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

Imports SystemImports System.IOImports System.SecurityImports System.Security.CryptographyImports System.Runtime.InteropServicesImports System.TextModule 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 SubEnd Module
Перейти к началу страницы
Ссылки
Для получения дополнительных сведений об использовании шифрования функции.NET, а также о криптографии, посетите следующий веб-узла корпорации Майкрософт сайты:

http://MSDN.Microsoft.com/NET

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

Перейти к началу страницы

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 301070 — последний просмотр: 06/05/2011 15:37:00 — редакция: 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
Отзывы и предложения