Şifrelemek ve Visual Basic .NET veya Visual Basic 2005 kullanarak bir dosyanın şifresini çözme

Makale çevirileri Makale çevirileri
Makale numarası: 301070 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makalenin Microsoft Visual C# .NET sürümü için bkz: 307010.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu makalede, Microsoft .NET Framework tarafından sağlanan şifreleme sınıfları kullanmayı açıklamaktadır. Şifreleme sınıfları, okunamayan bir durum için bir metin dosyasını şifrelemek için kullanabilirsiniz. Ardından, özgün biçimine geri dönmek için bu metin dosyasının şifresini çözebilir.



Gereksinimler

Aşağıdaki listede önerilen donanım, yazılım, ağ altyapısı ve gereken hizmet paketleri önerilmektedir:
  • Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server veya Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio .NET veya Microsoft Visual Studio 2005

Kullanım şifreleme ve Decryption

.NET Framework System.Security.Cryptographic ad çeşitli şifreleme ve şifre çözme yardımcı olacak araçlar sağlar. CryptoStream sağlanan birçok sınıflarının bir sınıftır. CryptoStream sınıfı şifrelemek veya içeriğin dışında bir dosyaya akışa gibi içeriğin şifresini çözmek için tasarlanmıştır.

Bir dosyayı şifrelemek için <a0></a0>, aşağıdaki adımları izleyin:
  1. Çalışma Visual Studio .NET veya Visual Studio 2005.
  2. Visual Basic 2005 veya Visual Basic. NET'te, yeni bir konsol uygulaması oluşturun. Bir modülü sizin için bir boş Main() yordamı ile birlikte oluşturulur.
  3. ımports</a0> deyimini System ad, System.Security ad, System.Security.Cryptography ad, System.Text ad ve System.ıo ad kullanın. Bu ad boşluklarında kodunuzu daha sonra gelen bildirimleri nitelemek olması için bunu yapmanız gerekir. Bu deyimleri tüm diğer bildirimlerden önce kullanmalısınız.
    Imports System
    Imports System.IO
    Imports System.Security
    Imports System.Security.Cryptography
    Imports System.Runtime.InteropServices
    Imports System.Text
    					
  4. Şifrelemek ve verilerin şifresini çözmek için bir gizli anahtar oluşturur. DESCryptoServiceProvider sınıfı, bir simetrik şifreleme algoritmasına temel alır. Simetrik şifreleme bir başlatma vektörü (IV) verileri şifrelemek için bir anahtar gerektirir. Verilerin şifresini çözmek için <a0></a0>, aynı anahtarı ve aynı IV olmalıdır. Ayrıca, aynı şifreleme algoritmasını kullanmanız gerekir. Anahtarlar, aşağıdaki yöntemlerden birini kullanarak oluşturabilirsiniz:
    • Yöntem 1 Kullanıcı için parola isteyebilir. Daha sonra parola anahtarı ve IV kullanın.
    • Yöntem 2 Simetrik şifreleme sınıflar için yeni bir örneğini oluşturduğunuzda, yeni bir anahtar ve yeni bir IV oturum için otomatik olarak oluşturulur. Bu anahtar ve yönetilen simetrik şifreleme sınıfları tarafından şifrelemek ve dosyanın şifresini çözmek için oluşturulan IV kullanabilirsiniz.

      Oluşturmak ve anahtarları dağıtma hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin veya .NET Framework yazılım geliştirme seti (SDK) belgelerine bakın:

      http://msdn.microsoft.com/en-us/library/5e9ft273(VS.71).aspx
  5. Yöntem 2'de belirtildiği gibi bir oturum için yeni bir anahtar oluşturmak için aşağıdaki işlevi ekler:
       ' 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. Bir yöntem EncryptFile adlı sınıfınızda oluşturun. EncryptFile yöntemi, üç parametre olmalıdır:
    • sInputFile
    • sOutputFile
    • sKey (Gizli anahtar şifreleme ve dosyanın şifresini çözmek için kullanılan budur.)
        Sub EncryptFile(ByVal sInputFilename As String, _
                       ByVal sOutputFilename As String, _
                       ByVal sKey As String)
        End Sub
    					
  7. Bir giriş FileStream nesnesi ve bir çıkış EncryptFile yordamı oluşturmak FileStream nesne. Bu nesneleri okuyabilir ve olması için hedef dosyaları yazılan.
            Dim fsInput As New FileStream(sInputFilename, _
                                        FileMode.Open, FileAccess.Read)
            Dim fsEncrypted As New FileStream(sOutputFilename, _
                                        FileMode.Create, FileAccess.Write)
    					
  8. DESCryptoServiceProvider</a0> sınıfının bir örneği bildirin. Gerçek şifreleme ve dosyalar üzerinde kullanılan gerçek şifre çözme teknolojisi temsil eder. RSA güvenlik veya başka bir şifreleme tekniği kullanmak istiyorsanız, bu noktada, farklı bir sağlayıcı oluşturabilirsiniz.
    Dim DES As New DESCryptoServiceProvider()
    					
  9. Şifreleme sağlayıcısı gizli anahtarınızla bayt dizisi sağlanması gerekir. System.Text ad GetBytes() adlı bir işlev sağlar. Kodlama özellikleri parçası GetBytes() işlevi bir dize al?r ve daha sonra bir bayt dizisi döndürür. Anahtar boyutu için her bir şifreleme tekniği farklıdır. Örneğin, Veri Şifreleme Standardı (DES) eşittir 8 bayt veya 8 karakter 64 bitlik bir anahtar kullanır.

    Bir anahtar belirtmezseniz, sağlayıcı rasgele bir oluşturur. Bu dosya başarıyla şifreler, ancak dosyanın şifresini çözmek için bir yolu yoktur. IV de sağlaması gerekir unutmayın. Bu değer, şifreleme bir parçası olarak kullanılır. Değer girmezseniz anahtarının IV rasgele oluşturulur. Değerleri hem şifreleme hem de şifre çözme için aynı olması gerektiğinden, bu değerlerin rasgele oluşturma izin gerekir.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
    					
  10. CryptoStream sınıfının bir örneğini oluşturun. Bir şifreleme nesnesi (CreateEncryptor) elde etmek için Şifreleme Sağlayıcısı'nı kullanın ve varolan FileStream nesneyi kurucu bir parçası olarak çıktı.
    Dim cryptostream As New CryptoStream(fsEncrypted, _
                                         desencrypt, _
                                         CryptoStreamMode.Write)
    					
  11. Girdi dosyasında okuma ve çıkış dosyasına yazma. Burada dosya, sağladığınız anahtarı kullanılarak şifrelenir CryptoStream nesnesi üzerinden geçmesine.
    Dim bytearrayinput(fsInput.Length - 1) As Byte
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
    					
Bir dosyanın şifresini çözmek için aşağıdaki adımları izleyin:
  1. DecryptFile adlı bir yöntemi oluşturun. Şifre çözme işlemi şifreleme işlemine benzer. Ancak, DecryptFileEncryptFile yordamdan iki önemli farklılıklar vardır.
    • CreateDecryptorCreateEncryptor yerine nesnenin nasıl kullanılacağını belirten bir CryptoStream nesnesi oluşturmak için kullanılır.
    • Hedef dosyanın şifresi çözülmüş metin yazıldığında, CryptoStream artık kaynak hedef akış yerine nesnedir.
    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() yordamına EncryptFile hem DecryptFile aramak için aşağıdaki satırları ekleyin.
        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. Dosyayı kaydedin. Uygulamanızın çalıştırın. Girdi dosyası adı için kullanılan yol var ve önemsiz bir dosyaya işaret ettiğinden emin olun.

Şifreleme ve Decryption çalışma that doğrulayın.

Bu kod, dosyanın doğru şifrelenmiş şifresi ve olduğunu onaylamak için bir metin (.txt) dosyası sınayın. Yeni bir dosyaya (gibi bu makaledeki Sub Main() yordam) dosyası yerine özgün dosyanın şifresini olduğunu emin olun. Şifresi çözülmüş dosyasını inceleyin ve özgün şifresi açılmış olan dosyayı karşılaştırın.

Bir tamamlanma kodu listesi

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

Referanslar

. NET'in bir şifreleme özelliklerinin nasıl kullanılacağı hakkında ve şifreleme hakkında daha fazla bilgi için aşağıdaki Microsoft Web sitelerini ziyaret edin:

http://msdn.microsoft.com/net

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

Özellikler

Makale numarası: 301070 - Last Review: 6 Aralık 2006 Çarşamba - Gözden geçirme: 5.6
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbvs2005swept kbvs2005applies kbsecurity kbio kbcrypt kbhowtomaster KB301070 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:301070

Geri Bildirim Ver

 

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