Ako šifrovať a dešifrovať súbor pomocou Visual C#

Preklady článku Preklady článku
ID článku: 307010 - Zobraziť produkty, ktorých sa tento článok týka.
Pre Microsoft Visual Basic .NET verziu tohto článku, pozri 301070.
Tento článok sa vzťahuje na nasledujúce Microsoft .NET Rámec triedy knižnica názvov:
  • System.IO
  • System.Security
  • System.Security.Cryptography
Poznámka Tento článok sa nevzťahuje na Microsoft .NET Framework 2.0.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

Súhrn

Tento článok popisuje použitie kryptografie tried ktoré sú poskytované Microsoft .NET Framework šifrovať textového súboru nečitateľné štát, a potom dešifrovať tento textový súbor späť do pôvodného formát.

Požiadavky

Nasledujúci zoznam popisuje odporúčaný hardvér, softvér, sieťovej infraštruktúry a balíky service pack, ktoré musíte mať:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 rozšírené Server, Server Windows NT 4.0 alebo Microsoft Windows XP Professional
  • Microsoft Visual Studio 2005 alebo Microsoft Visual Studio .NET

Šifrovanie a dešifrovanie

System.Security.Cryptographic priestor názvov v spoločnosti Microsoft.NET Framework ponúka rôzne nástroje, ktoré vám pomôžu s šifrovanie a dešifrovanie. CryptoStream trieda je jedným z mnohých tried, ktoré poskytuje. CryptoStream trieda je určená pre šifrovanie alebo dešifrovanie obsahu, ako je vysielané von do súboru.

Šifrovanie súboru

Ak chcete šifrovať súbor, postupujte nasledovne:
  1. Spustite program Visual Studio 2005 alebo Visual Studio .NET.
  2. Kliknite na tlačidlo Visual C# podľaProjekty, a potom kliknite na tlačidlo Konzolovú aplikáciupodľa Šablóny. Visual C# .NET vytvorí statická trieda, spolu s prázdna procedúra Main () .
  3. Použiť pomocou vyhlásenie (ako je uvedené v kóde vzorky, že takto) na z nasledujúcich názvov:
    • Systém
    • System.Security
    • System.Security.Cryptography
    • System.Text
    • System.IO
    tak, že nemáte nárok vyhlásenia z týchto priestory názvov v kóde. Musíte použiť tieto výkazy pred akékoľvek iné vyhlásenia.
    using System;
    using System.IO;
    using System.Security;
    using System.Security.Cryptography;
    using System.Runtime.InteropServices;
    using System.Text;
    					
  4. Generovať tajného kľúča pre šifrovanie a dešifrovanie údajov. DESCryptoServiceProvider je založený na symetrické šifrovací algoritmus. Symetrické šifrovanie vyžaduje key a Inicializačný vektor (IV) na šifrovanie údajov. Na dešifrovanie údajov, musíte mať rovnaký kľúč a rovnakým IV. Musíte tiež použiť rovnaký šifrovací algoritmus. Môžete vygenerovať kľúče pomocou Jednou z nasledujúcich metód:
    • Metóda 1 Možno vyzve používateľa na zadanie hesla. Potom použite heslo ako kľúč a IV.
    • Metóda 2 Keď vytvoríte novú inštanciu symetrické šifrovacie triedy, nový kľúč a IV sú automaticky vytvorené pre reláciu. Použitie kľúč a IV generované spravovaných symetrické šifrovacie triedy šifrovanie a dešifrovanie súborov.

      Ďalšie informácie o tom, ako vytvárať a distribuovať kľúče, nájdete v súprave SDK Microsoft .NET Framework Dokumentáciu, alebo pozri nasledujúce webová lokalita Microsoft Developer Network (MSDN) webovej Lokalita:
      Generovanie kľúčov pre šifrovanie a dešifrovanie
  5. Pridať nasledovné funkcie vygenerovať nový kľúč pre relácie (ako je to uvedené v metóde 2 krok 4):
    //  Call this function to remove the key from memory after use for security.
    [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
    public static extern bool ZeroMemory(ref string Destination, int Length);
    		
    // Function to Generate a 64 bits Key.
    static string GenerateKey() 
    {
    	// Create an instance of Symetric Algorithm. Key and IV is generated automatically.
    	DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
    
    	// Use the Automatically generated key for Encryption. 
    	return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
    }
  6. Vytvoriť metódu vo svojej triede, ktorý sa nazýva EncryptFile. Triedy EncryptFile musia mať nasledujúce tri parametre:
    • sInputFilename
    • sOutputFilename
    • soportuma (Tajný kľúč, ktorý slúži na šifrovanie a dešifrovanie súbor.)
    static void EncryptFile(string sInputFilename,
    		string sOutputFilename,
    		string sKey)
    					
  7. V EncryptFile konaní, vytvoriť FileStream objekt vstupné a výstupné FileStream objekt. Tieto objekty môžu čítať a napísal do cieľa súbory.
    FileStream fsInput = new FileStream(sInputFilename, 
    				FileMode.Open, 
    				FileAccess.Read);
    
    FileStream fsEncrypted = new FileStream(sOutputFilename, 
    				FileMode.Create, 
    				FileAccess.Write);
    					
  8. Vyhlásiť inštanciu triedy DESCryptoServiceProvider . To predstavuje skutočný šifrovanie a skutočnými dešifrovanie technológia, ktorú používa na súbory. Na tomto mieste môžete vytvoriť inému poskytovateľovi, ak chcete použiť RSAsecutiry alebo iné šifrovacie technika.
    DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
    					
  9. Musia byť vybavené kryptografické poskytovateľ vášho tajný kľúč ako pole bajtov. System.Text priestor názvov poskytuje funkciu, ktorá sa volá GetBytes(). Ako súčasť jeho kódovanie funkcie, funkcia GetBytes() trvá reťazec a potom vráti počet bajtov. Na Veľkosť kľúča je odlišná pre každý šifrovacie techniky. Napríklad, Štandard DES (DES) vyžaduje 64-bitový kľúč, ktorý sa rovná 8 bytov alebo až 8 znakov.

    Ak nezadáte kľúč, poskytovateľ náhodne generuje jeden. To úspešne šifruje súbor, ale neexistuje žiadny spôsob, ako dešifrovanie súborov. Všimnite si, že musíte tiež zadať Inicializačný vektor IV. Táto hodnota sa používa ako súčasť šifrovanie. Ako kľúč IV je náhodne generované Ak nezadáte hodnotu. Pretože hodnoty musia byť to isté pre šifrovanie a dešifrovanie, si nemôže dovoliť náhodné generovanie týchto hodnôt.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
    DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    					
  10. Vytvoriť inštanciu triedy CryptoStream pomocou kryptografické poskytovateľa získať šifrovania objekt (CreateEncryptor) a existujúce výstupné FileStream objekt ako súčasť konštruktor.
    ICryptoTransform desencrypt = DES.CreateEncryptor();
    CryptoStream cryptostream = new CryptoStream(fsEncrypted, 
    					desencrypt, 
    					CryptoStreamMode.Write);
    					
  11. Prečítajte si vo vstupnom súbore, a potom napísať výstup súbor. Prejsť na CryptoStream objekt kde súbor je zašifrovaný pomocou kľúča k dispozícii.
    byte[] bytearrayinput = new byte[fsInput.Length - 1];
    fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
    cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
    					

Dešifrovať súbor

Ak chcete dešifrovať súbor, postupujte nasledovne:
  1. Vytvoriť metódu, a potom to menoDecryptFile. Dešifrovanie je podobná proces šifrovania, však DecryptFile postup má dva hlavné rozdiely z EncryptFile postupu.
    • CreateDecryptor sa používa namiesto CreateEncryptorCryptoStream objekt, ktorý určuje, ako objekt môže byť použitý.
    • Kedy dešifrovanie text je písaný na miesto určenia súbor je CryptoStream objekt je teraz zdroj miesto určenia prúd.
    static void DecryptFile(string sInputFilename, 
    	                string sOutputFilename,
    	                string sKey)
    {
    	DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
    	//A 64 bit key and IV is 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.
    	FileStream fsread = new FileStream(sInputFilename, 
    		                           FileMode.Open, 
    		                           FileAccess.Read);
    	//Create a DES decryptor from the DES instance.
    	ICryptoTransform desdecrypt = DES.CreateDecryptor();
    	//Create crypto stream set to read and do a 
    	//DES decryption transform on incoming bytes.
    	CryptoStream cryptostreamDecr = new CryptoStream(fsread, 
    		                                         desdecrypt,
    		                                         CryptoStreamMode.Read);
    	//Print the contents of the decrypted file.
    	StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
    	fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
    	fsDecrypted.Flush();
    	fsDecrypted.Close();
    }
    					
  2. Pridajte nasledujúce riadky postupu Main () volanie, EncryptFile a DecryptFile:
    static void Main()
    {
          // Must be 64 bits, 8 bytes.
          // Distribute this key to the user who will decrypt this file.
          string sSecretKey;
             
          // Get the key for the file to encrypt.
          sSecretKey = GenerateKey();
    
          // For additional security pin the key.
          GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
             
          // Encrypt the file.        
          EncryptFile(@"C:\MyData.txt", 
             @"C:\Encrypted.txt", 
             sSecretKey);
    
          // Decrypt the file.
          DecryptFile(@"C:\Encrypted.txt", 
             @"C:\Decrypted.txt", 
             sSecretKey);
    
          // Remove the key from memory. 
          ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
          gch.Free();
    }
  3. Uložte súbor. Spustiť aplikáciu. Uistite sa, že cesta, ktorá sa používa pre vstupný súbor názov miesta do existujúceho súbor.

Skúšobný postup

Test tento kód s textového súboru (.txt) potvrdil, že kód šifrované a dešifrovať súbor správne. Uistite sa, že ste dešifrovať súbor do nového súboru (napríklad Main () postup v tomto článku) namiesto pôvodného súboru. Dešifrovať súbor, a potom porovnať ju do pôvodného súboru.

Kompletný kód zoznam

using System;
using System.IO;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text;

namespace CSEncryptDecrypt
{
   class Class1
   {
      //  Call this function to remove the key from memory after use for security
      [System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")]
      public static extern bool ZeroMemory(IntPtr Destination, int Length);
		
      // Function to Generate a 64 bits Key.
      static string GenerateKey() 
      {
         // Create an instance of Symetric Algorithm. Key and IV is generated automatically.
         DESCryptoServiceProvider desCrypto =(DESCryptoServiceProvider)DESCryptoServiceProvider.Create();

         // Use the Automatically generated key for Encryption. 
         return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
      }

      static void EncryptFile(string sInputFilename,
         string sOutputFilename, 
         string sKey) 
      {
         FileStream fsInput = new FileStream(sInputFilename, 
            FileMode.Open, 
            FileAccess.Read);

         FileStream fsEncrypted = new FileStream(sOutputFilename, 
            FileMode.Create, 
            FileAccess.Write);
         DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
         DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
         DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
         ICryptoTransform desencrypt = DES.CreateEncryptor();
         CryptoStream cryptostream = new CryptoStream(fsEncrypted, 
            desencrypt, 
            CryptoStreamMode.Write); 

         byte[] bytearrayinput = new byte[fsInput.Length];
         fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
         cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
         cryptostream.Close();
         fsInput.Close();
         fsEncrypted.Close();
      }

      static void DecryptFile(string sInputFilename, 
         string sOutputFilename,
         string sKey)
      {
         DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
         //A 64 bit key and IV is 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.
         FileStream fsread = new FileStream(sInputFilename, 
            FileMode.Open, 
            FileAccess.Read);
         //Create a DES decryptor from the DES instance.
         ICryptoTransform desdecrypt = DES.CreateDecryptor();
         //Create crypto stream set to read and do a 
         //DES decryption transform on incoming bytes.
         CryptoStream cryptostreamDecr = new CryptoStream(fsread, 
            desdecrypt,
            CryptoStreamMode.Read);
         //Print the contents of the decrypted file.
         StreamWriter fsDecrypted = new StreamWriter(sOutputFilename);
         fsDecrypted.Write(new StreamReader(cryptostreamDecr).ReadToEnd());
         fsDecrypted.Flush();
         fsDecrypted.Close();
      } 

      static void Main()
      {
         // Must be 64 bits, 8 bytes.
         // Distribute this key to the user who will decrypt this file.
         string sSecretKey;
         
         // Get the Key for the file to Encrypt.
         sSecretKey = GenerateKey();

         // For additional security Pin the key.
         GCHandle gch = GCHandle.Alloc( sSecretKey,GCHandleType.Pinned );
         
         // Encrypt the file.        
         EncryptFile(@"C:\MyData.txt", 
            @"C:\Encrypted.txt", 
            sSecretKey);

         // Decrypt the file.
         DecryptFile(@"C:\Encrypted.txt", 
            @"C:\Decrypted.txt", 
            sSecretKey);

         // Remove the Key from memory. 
         ZeroMemory(gch.AddrOfPinnedObject(), sSecretKey.Length * 2);
         gch.Free();
      }
   }
}

Odkazy

Ďalšie informácie o šifrovaní a pomocou kryptografické funkcie platformy .NET, nájdete na nasledovných webových lokalitách MSDN:
System.Security.Cryptography priestor názvov
Microsoft .NET Framework – stredisko vývojárov

Vlastnosti

ID článku: 307010 - Posledná kontrola: 20. júla 2013 - Revízia: 4.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Kľúčové slová: 
kbsecurity kbio kbcrypt kbhowtomaster kbmt KB307010 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok je preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft a možno ho opraviť prostredníctvom technológie Community Translation Framework (CTF). Microsoft ponúka strojovo preložené články, články upravené komunitou aj články preložené prekladateľmi, aby zabezpečil prístup ku všetkým článkom databázy Knowledge Base vo viacerých jazykoch. Strojovo preložené články aj upravené články môžu obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky. Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené neprávnym prekladom obsahu alebo jeho použitím zo strany našich zákazníkov. Ďalšie informácie o technológii CTF nájdete na lokalite http://support.microsoft.com/gp/machine-translation-corrections/sk.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 307010

Odošlite odozvu

 

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