Sei sulla pagina 1di 3

Como criptografar e descriptografar um arquivo usando o Visual C#

http://support.microsoft.com/kb/307010/pt-br

Buscar solues Perguntar nos fruns Obter ajuda agora

Selecione o produto para o qual voc precisa de ajuda

Windows

Internet Explorer

Office

Xbox

Media Player

Skype

Windows Phone

Mais produtos

Como criptografar e descriptografar um arquivo usando o Visual C#


ID do artigo: 307010 - Exibir os produtos aos quais esse artigo se aplica.

Exibir Aviso de Iseno de Traduo Automtica Clique aqui para exibir o artigo traduzido e o artigo original em ingls, lado a lado. Este artigo foi publicado anteriormente em Q307010

Para obter uma verso deste artigo do Microsoft Visual Basic .NET, consulte 301070 (http://support.microsoft.com/kb/301070/) .

Este artigo se refere aos seguintes namespaces da biblioteca de classes do.NET Framework da Microsoft: System. IO System. Security System.Security.Cryptography Observao Este artigo no se aplica para o Microsoft.NET Framework 2.0.

Sumrio
Este artigo descreve como usar as classes de criptografia que so fornecidos com o Microsoft.NET Framework para criptografar o arquivo de um texto para um estado ilegvel e para descriptografar esse arquivo de texto volta para seu formato original.

Requisitos
A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que voc deve ter: Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, Windows NT 4.0 Server ou Microsoft Windows XP Professional Microsoft Visual Studio 2005 ou Microsoft Visual Studio .NET

Criptografia e descriptografia
O namespace System.Security.Cryptographic no Microsoft.NET Framework fornece uma variedade de ferramentas para ajud-lo com criptografia e descriptografia. A classe CryptoStream uma das muitas classes que fornecido. A classe CryptoStream projetada para criptografar ou descriptografar o contedo como ele transmitido check-out em um arquivo.

Criptografar um arquivo
Para criptografar um arquivo, execute estas etapas: 1. Inicie o Visual Studio de 2005 ou Visual Studio .NET. 2. Clique em Visual C# em projetose, em seguida, clique em Aplicativo de Console em modelos. O Visual C# .NET cria uma classe esttica , juntamente com um procedimento Main () vazio. 3. Use a instruo using (conforme indicado no cdigo de exemplo que segue) sobre os seguintes namespaces: Sistema System. Security System.Security.Cryptography System. Text System. IO para que no precise qualificar declaraes desses namespaces posteriormente no seu cdigo. Voc deve usar estas instrues antes de quaisquer outras declaraes. using System; using System.IO; using System.Security; using System.Security.Cryptography; using System.Runtime.InteropServices; using System.Text; 4. Gere uma chave secreta para criptografar e descriptografar os dados. O DESCryptoServiceProvider baseado em um algoritmo de criptografia simtrica. A criptografia simtrica requer uma chave e um vetor de inicializao (IV) para criptografar os dados. Para descriptografar os dados, voc deve ter a mesma chave e o mesmo IV. Voc tambm deve usar o mesmo algoritmo de criptografia. Voc pode gerar as chaves usando um dos seguintes mtodos: Mtodo 1 Voc pode solicitar ao usurio uma senha. Em seguida, use a senha como a chave e o IV.

1 de 3

20/03/2013 08:51

Como criptografar e descriptografar um arquivo usando o Visual C#

http://support.microsoft.com/kb/307010/pt-br

Mtodo 2 Quando voc cria uma nova instncia das classes de criptografia simtricas, uma nova chave e IV so criados automaticamente para a sesso. Use a chave e IV gerados pelo gerenciado classes criptografia simtricas para criptografar e descriptografar o arquivo. Para obter mais informaes sobre como gerar e distribuir chaves, consulte a documentao do Microsoft.NET Framework SDK ou consulte o seguinte site da Microsoft Developer Network (MSDN): Gerao de chaves de criptografia e descriptografia (http://msdn.microsoft.com/en-us/library/5e9ft273(v=vs.80).aspx) 5. Adicione a seguinte funo para gerar uma nova chave para uma sesso (conforme indicado no mtodo 2 da etapa 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

2 de 3

20/03/2013 08:51

Como criptografar e descriptografar um arquivo usando o Visual C#

http://support.microsoft.com/kb/307010/pt-br

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. Salve o arquivo. Execute o aplicativo. Certifique-se de que o caminho que usado para o nome do arquivo de entrada aponta para um arquivo existente.

O procedimento de teste
Teste esse cdigo com um arquivo de texto (. txt) para confirmar que o cdigo criptografado e descriptografar o arquivo corretamente. Certifique-se de que voc descriptografar o arquivo para um novo arquivo (como no procedimento Main () neste artigo) em vez de para o arquivo original. Examine o arquivo descriptografado e compare-o com o arquivo original.

Listagem de cdigo completo


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(); } } }

Referncias
Para obter mais informaes sobre criptografia e sobre como usar os recursos de criptografia do .NET, consulte os seguintes sites da MSDN: Espao para nome System.Security.Cryptography (http://msdn.microsoft.com/en-us/library/system.security.cryptography(v=vs.71).aspx) Microsoft.NET Framework Developer Center (http://msdn.microsoft.com/en-us/netframework/default.aspx)

Propriedades
ID do artigo: 307010 - ltima reviso: quinta-feira, 27 de dezembro de 2012 - Reviso: 39.0 A informao contida neste artigo aplica-se a:
Microsoft Visual C# 2005 Microsoft Visual C# .NET 2003 Standard Edition Microsoft Visual C# .NET 2002 Standard Edition

Palavras-chave: kbsecurity kbio kbcrypt kbhowtomaster kbmt KB307010 KbMtpt Traduo automtica
IMPORTANTE: Este artigo foi traduzido por um sistema de traduo automtica (tambm designado por Machine Translation ou MT), no tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicaes (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em portugus a totalidade dos artigos existentes na base de dados de suporte. No entanto, a traduo automtica no sempre perfeita, podendo conter erros de vocabulrio, sintaxe ou gramtica. A Microsoft no responsvel por incoerncias, erros ou prejuzos ocorridos em decorrncia da utilizao dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizaes freqentes ao software de traduo automtica (MT). Obrigado. Clique aqui para ver a verso em Ingls deste artigo: 307010 (http://support.microsoft.com/kb/307010/en-us/ )

Submeter comentrios
Voltar para o incio

3 de 3

20/03/2013 08:51

Potrebbero piacerti anche