Momentan sunteți offline, așteptați să vă reconectați la internet

Cum să cripta şi decripta un fişier folosind Visual C#

IMPORTANT: Acest articol este tradus cu ajutorul software-ului Microsoft de traducere automată și poate fi corectat prin intermediul tehnologiei Community Translation Framework (CTF). Microsoft oferă articole traduse automat, post-editate de comunitate și articole traduse de oameni, pentru a permite accesul la toate articolele din Baza noastră de cunoștințe în mai multe limbi. Articolele traduse automat și post-editate pot conține greșeli de vocabular, sintaxă și/sau gramatică. Microsoft nu este responsabil de inexactitățile, erorile sau daunele cauzate de traducerea greșită a conținutului sau de utilizarea acestuia de către clienți. Găsiți mai multe informații despre traducerea în colaborare la http://support.microsoft.com/gp/machine-translation-corrections/ro.

Faceți clic aici pentru a vizualiza versiunea în limba engleză a acestui articol: 307010
Pentru o versiune de Microsoft Visual Basic .NET din acest articol, a se vedea 301070.
Acest articol se referă la următoarele Microsoft .NET Cadru Biblioteca clasa spaţii de nume:
  • System.IO
  • System.Security
  • System.Security.Cryptography
Notă Acest articol nu se aplică în cazul Microsoft .NET Framework 2.0.
Rezumat
Acest articol descrie cum se utilizează clasele criptografie care sunt furnizate de Microsoft .NET Framework pentru a cripta un fişier text la un stat nu poate fi citită, şi apoi pentru a decripta ca fişier text înapoi la originală formatul.

Cerinţele

Listă tabel următoare evidenţiază recomandat hardware, software-ul, infrastructura reţelei, şi pachete de consolidare servicii, care trebuie să aveţi:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, Server Windows NT 4.0 sau Microsoft Windows XP Professional
  • Microsoft Visual Studio 2005 sau Microsoft Visual Studio .NET

Criptarea şi decriptarea

Spaţiul de nume la System.Security.Cryptographic în Microsoft .NET Framework oferă o varietate de instrumente pentru a vă ajuta cu criptare și decriptare. Clasa CryptoStream este una din mai multe clase, care este furnizat. Clasa CryptoStream este conceput pentru a cripta sau decripta conţinutul aşa cum este curge afară într-un fişier.

Criptați un fișier

Pentru a cripta un fişier, urmaţi aceşti paşi:
  1. Începe Visual Studio 2005 sau Visual Studio .NET.
  2. Faceţi clic pe Visual C# subProiecte, apoi faceţi clic pe Consola cereresub Template-uri. Visual C# .NET creează o clasă statice pentru tine, împreună cu o procedură de Main() gol.
  3. Utilizează Instrucţiunea folosind (în conformitate cu mostre de cod care urmează) următoarele spaţii de nume:
    • Sistem
    • System.Security
    • System.Security.Cryptography
    • System.Text
    • System.IO
    astfel încât să nu trebuie să se califice declaraţiile din aceste spaţii de nume în codul dumneavoastră. Trebuie să utilizaţi aceste declaraţii înainte de orice alte declaraţiile.
    using System;using System.IO;using System.Security;using System.Security.Cryptography;using System.Runtime.InteropServices;using System.Text;					
  4. Genera o cheie secretă pentru a cripta şi decripta datele. DESCryptoServiceProvider este bazat pe un algoritm de criptare simetrică. Simetrice criptare necesită o cheie si un vector de initializare (IV) pentru a cripta date. Pentru a decripta datele, trebuie să aibă aceeaşi cheie şi aceeaşi IV. Trebuie să vă de asemenea, utilizează acelaşi algoritm de criptare. Puteţi genera cheile utilizând oricare dintre următoarele metode:
    • Metoda 1 Poate solicita utilizatorului o parola. Apoi, utilizaţi parola ca cheie şi IV.
    • Metoda 2 Atunci când creaţi un nou exemplu de simetrice criptografice cursuri, un nou cheie şi IV sunt create automat pentru sesiune. Utilizarea cheie şi IV generate de clasele criptografic simetric gestionate la cripta şi decripta fişierul.

      Pentru mai multe informaţii despre cum să genera si distribui chei, a se vedea Microsoft .NET Framework SDK Documentaţia, sau a se vedea următoarele Web Reţea Microsoft pentru dezvoltatori (MSDN) site-ul:
  5. Adauga următoarea funcţie pentru a genera un nou cheie pentru o sesiune (după cum sa menţionat în metoda 2 din Pasul 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. Creaţi o metoda în clasa ta, care este numit EncryptFile. Clasa EncryptFile trebuie să aibă următoarele trei parametri:
    • sInputFilename
    • sOutputFilename
    • sKey (Cheia secretă, care este folosit pentru a cripta şi decripta fişier.)
    static void EncryptFile(string sInputFilename,		string sOutputFilename,		string sKey)					
  7. În procedura de EncryptFile , a crea un obiect de FileStream intrare si o iesire FileStream obiect. Aceste obiecte pot fi citite la şi scris pentru a-ţintă fişiere.
    FileStream fsInput = new FileStream(sInputFilename, 				FileMode.Open, 				FileAccess.Read);FileStream fsEncrypted = new FileStream(sOutputFilename, 				FileMode.Create, 				FileAccess.Write);					
  8. Declară o instanţă a clasei DESCryptoServiceProvider . Aceasta reprezintă criptare reale şi reale decriptare tehnologie care este folosit pe fişiere. În acest moment, aveţi posibilitatea să creaţi un alt furnizor în cazul în care preferaţi să utilizaţi RSAsecutiry sau un alt criptografice tehnica.
    DESCryptoServiceProvider DES = new DESCryptoServiceProvider();					
  9. Furnizorul criptografic, trebuie prevăzute cu dumneavoastră cheie secretă ca o matrice de octeţi. Spaţiul de nume la System.Text oferă o funcţie care este numit GetBytes(). Ca parte din caracteristicile sale de codificare, în funcţie de GetBytes() ia un şir şi apoi întoarce o matrice de octeţi. The Dimensiune cheie este diferit pentru fiecare tehnica criptografice. De exemplu, Data Encryption Standard (DES) ia o cheie de 64-bit, care este egală cu 8 octeți sau la 8 caractere.

    Dacă nu furnizaţi o cheie, furnizorul aleatoriu generează unul. Acest lucru cu succes criptează dosar, dar nu există nici o modalitate pentru a decripta fişierul. Reţineţi că, de asemenea, trebuie să furnizaţi vectorul de initializare (IV). această valoare este folosit ca parte de criptare. Ca cheia, IV este generate aleator dacă nu furnizaţi valoarea. Deoarece valorile trebuie să fie acelaşi lucru pentru criptare și decriptare, trebuie să nu permită aleatoare generaţie de aceste valori.
    DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);					
  10. Crea o instanta a clasei CryptoStream utilizând Furnizorul criptografic pentru a obţine o criptare obiect (CreateEncryptor) şi cele existente de ieşire FileStream obiect ca parte a constructorului.
    ICryptoTransform desencrypt = DES.CreateEncryptor();CryptoStream cryptostream = new CryptoStream(fsEncrypted, 					desencrypt, 					CryptoStreamMode.Write);					
  11. Citiţi în fişierul de intrare, şi apoi scrie la ieşire fişier. Trece prin intermediul CryptoStream obiect în cazul în care fişierul este criptat utilizând cheia care le furnizate.
    byte[] bytearrayinput = new byte[fsInput.Length - 1];fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);					

Decriptarea unui fisier

Pentru a decripta un fişier, urmaţi aceşti paşi:
  1. Creaţi o metodă, şi apoi nume de sign-in acestaDecryptFile. Procesul de decriptare este similar cu procesul de criptare, cu toate acestea, procedura de DecryptFile a două diferenţe cheie din procedura de EncryptFile .
    • CreateDecryptor este folosit în loc de CreateEncryptor pentru a crea obiectul CryptoStream , care specifică modul în care obiectul pot fi folosite.
    • Când decriptat textul este scris la destinaţie fişier, obiectul CryptoStream este acum sursa în loc de destinaţie flux.
    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. Adăugaţi următoarele linii la procedura Main() pentru a apela EncryptFile şi de 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. Salvaţi fişierul. Executaţi aplicaţia. Asiguraţi-vă că calea care este folosit pentru punctele nume de intrare fişier existent fişier.

Procedura de testare

Acest cod de test cu un fişier text (.txt) pentru a confirma că codul criptat și decriptat fișierul corect. Asiguraţi-vă că vă decripta fişierul într-un nou fişier (ca în procedura Main() în acest articol) în loc de la fişierul original. Examinaţi fişierul decriptat, iar apoi comparati-l la fişierul original.

Completaţi codul listare

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();      }   }}
Referinţe
Pentru mai multe informaţii despre criptografie şi despre utilizarea caracteristici criptografice de .NET, consultaţi următoarele site-uri MSDN Web:

Avertisment: acest articol a fost tradus automat

Proprietăți

ID articol: 307010 - Ultima examinare: 07/20/2013 13:43:00 - Revizie: 2.0

Microsoft Visual C# 2005, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbsecurity kbio kbcrypt kbhowtomaster kbmt KB307010 KbMtro
Feedback
s.dqid"; document.getElementsByTagName("head")[0].appendChild(m);