0 Entrar
IMPORTANTE: Este artigo foi traduzido pelo software de traduo automtica da Microsoft e
eventualmente pode ter sido editado pela Microsoft Community atravs da tecnologia Community
Translation Framework CTF ou por um tradutor profissional. A Microsoft oferece artigos traduzidos
automaticamente por software, por tradutores profissionais e editados pela comunidade para que
voc tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No
entanto, um artigo traduzido pode conter erros de vocabulrio, sintaxe e/ou gramtica. A Microsoft
no responsvel por qualquer inexatido, erro ou dano causado por qualquer traduo imprecisa do
contedo ou por seu uso pelos nossos clientes.
Para obter uma verso deste artigo do Microsoft Visual Basic .NET, consulte 301070.
Este artigo se refere aos seguintes namespaces da biblioteca de classes do.NET Framework da
Microsoft:
System.IO
System. Security
System.Security.Cryptography
Sumrio
Este artigo descreve como usar as classes de criptografia fornecidas com o Microsoft.NET Framework
para criptografar um texto de arquivo para um estado ilegvel e, em seguida, para descriptografar esse
arquivo de texto de volta para seu formato original.
Requisitos
A lista seguinte descreve o hardware
https://support.microsoft.com/ptbr/kb/307010 recomendado, software, infraestrutura de rede e service packs que1/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
A lista seguinte descreve o hardware recomendado, software, infraestrutura 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
Criptografia e descriptografia
Criptografar um arquivo
3. Use a instruo using conforme indicado no cdigo de exemplo que se segue sobre os
namespaces a seguir:
Sistema
System. Security
System.Security.Cryptography
System. Text
System.IO
para que voc no precise qualificar declaraes desses namespaces posteriormente no seu
cdigo.
usingSystem;
usingSystem.IO;
usingSystem.Security;
usingSystem.Security.Cryptography;
usingSystem.Runtime.InteropServices;
usingSystem.Text;
symmetricencryption requer
https://support.microsoft.com/ptbr/kb/307010 uma chave e um vetor de inicializao IV para criptografar a thedata.2/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
Mtodo 2
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:
Gerando chaves de criptografia e descriptografia
5. Adicione a seguinte funo para gerar uma nova chave para uma sesso conforme mencionado
no mtodo 2 da etapa 4:
//Callthisfunctiontoremovethekeyfrommemoryafteruseforsecu
rity.
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL",EntryPoint="R
tlZeroMemory")]
publicstaticexternboolZeroMemory(refstringDestination,intLengt
h);
//FunctiontoGeneratea64bitsKey.
staticstringGenerateKey()
{
//CreateaninstanceofSymetricAlgorithm.KeyandIVisgene
ratedautomatically.
DESCryptoServiceProviderdesCrypto=(DESCryptoServiceProvider)D
ESCryptoServiceProvider.Create();
//UsetheAutomaticallygeneratedkeyforEncryption.
returnASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
6. Crie um mtodo na sua classe nomeada EncryptFile. A classe EncryptFile deve ter trs parmetros
a seguir:
sInputFilename
sOutputFilename
sKey
staticvoidEncryptFile(stringsInputFilename,
stringsOutputFilename,
stringsKey)
7. No procedimento EncryptFile
https://support.microsoft.com/ptbr/kb/307010 , crie um objeto FileStream de entrada e sada de uma objeto 3/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
FileStreamfsInput=newFileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
FileStreamfsEncrypted=newFileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);
DESCryptoServiceProviderDES=newDESCryptoServiceProvider();
9. O provedor de criptografia deve ser fornecido com chave de yoursecret como uma matriz de
bytes. O namespace System. Text fornece uma funo chamada GetBytes. Como parte de seus
recursos de codificao, a funo GetBytes aceita uma cadeia de caracteres e retorna uma matriz
de bytes. Thesize da chave diferente para cada tcnica de criptografia. Por exemplo, padro de
criptografia de dados DES usa uma chave de 64 bits que igual a 8 bytes orto 8 caracteres.
DES.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
10. Criar uma instncia da classe CryptoStream usando o provedor criptogrfico para obter um objeto
criptografia CreateEncryptor e o existente sada objeto FileStream como parte do construtor.
ICryptoTransformdesencrypt=DES.CreateEncryptor();
CryptoStreamcryptostream=newCryptoStream(fsEncrypted,
desencrypt,
CryptoStreamMode.Write);
11. Leia no arquivo de entrada e, em seguida, gravar o arquivo de sada. Passe o objeto CryptoStream
onde o arquivo est criptografado usando a chave que youprovided.
byte[]bytearrayinput=newbyte[fsInput.Length1];
fsInput.Read(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);
Descriptografar um arquivo
staticvoidDecryptFile(stringsInputFilename,
stringsOutputFilename,
stringsKey)
{
DESCryptoServiceProviderDES=newDESCryptoServiceProvider();
//A64bitkeyandIVisrequiredforthisprovider.
//SetsecretkeyForDESalgorithm.
DES.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
//Setinitializationvector.
DES.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
//Createafilestreamtoreadtheencryptedfileback.
FileStreamfsread=newFileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//CreateaDESdecryptorfromtheDESinstance.
ICryptoTransformdesdecrypt=DES.CreateDecryptor();
//Createcryptostreamsettoreadanddoa
//DESdecryptiontransformonincomingbytes.
CryptoStreamcryptostreamDecr=newCryptoStream(fsread,
desdecrypt,
CryptoStreamMo
de.Read);
//Printthecontentsofthedecryptedfile.
StreamWriterfsDecrypted=newStreamWriter(sOutputFilename);
fsDecrypted.Write(newStreamReader(cryptostreamDecr).ReadToEnd
());
https://support.microsoft.com/ptbr/kb/307010 5/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
fsDecrypted.Flush();
fsDecrypted.Close();
}
staticvoidMain()
{
//Mustbe64bits,8bytes.
//Distributethiskeytotheuserwhowilldecryptthisfile.
stringsSecretKey;
//Getthekeyforthefiletoencrypt.
sSecretKey=GenerateKey();
//Foradditionalsecuritypinthekey.
GCHandlegch=GCHandle.Alloc(sSecretKey,GCHandleType.Pinned);
//Encryptthefile.
EncryptFile(@"C:\MyData.txt",
@"C:\Encrypted.txt",
sSecretKey);
//Decryptthefile.
DecryptFile(@"C:\Encrypted.txt",
@"C:\Decrypted.txt",
sSecretKey);
//Removethekeyfrommemory.
ZeroMemory(gch.AddrOfPinnedObject(),sSecretKey.Length*2);
gch.Free();
}
3. Salve o arquivo.
Testar o procedimento
Teste esse cdigo com um arquivo de texto . txt para confirmar que o cdigo criptografados e
descriptografados o arquivo corretamente. Certifiquese de que voc descriptografar o arquivo para um
novo arquivo como no procedimento Main () neste artigo em vez de no arquivo original. Examine o
arquivo descriptografado e, em seguida, comparlo com o arquivo original.
usingSystem;
usingSystem.IO;
https://support.microsoft.com/ptbr/kb/307010 6/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
usingSystem.Security;
usingSystem.Security.Cryptography;
usingSystem.Runtime.InteropServices;
usingSystem.Text;
namespaceCSEncryptDecrypt
{
classClass1
{
//Callthisfunctiontoremovethekeyfrommemoryafteruseforsec
urity
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL",EntryPoint
="RtlZeroMemory")]
publicstaticexternboolZeroMemory(IntPtrDestination,intLength);
//FunctiontoGeneratea64bitsKey.
staticstringGenerateKey()
{
//CreateaninstanceofSymetricAlgorithm.KeyandIVisgenerate
dautomatically.
DESCryptoServiceProviderdesCrypto=(DESCryptoServiceProvider)DESCr
yptoServiceProvider.Create();
//UsetheAutomaticallygeneratedkeyforEncryption.
returnASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
staticvoidEncryptFile(stringsInputFilename,
stringsOutputFilename,
stringsKey)
{
FileStreamfsInput=newFileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
FileStreamfsEncrypted=newFileStream(sOutputFilename,
FileMode.Create,
FileAccess.Write);
DESCryptoServiceProviderDES=newDESCryptoServiceProvider();
DES.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransformdesencrypt=DES.CreateEncryptor();
CryptoStreamcryptostream=newCryptoStream(fsEncrypted,
desencrypt,
CryptoStreamMode.Write);
byte[]bytearrayinput=newbyte[fsInput.Length];
fsInput.Read(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Write(bytearrayinput,0,bytearrayinput.Length);
cryptostream.Close();
fsInput.Close();
fsEncrypted.Close();
}
staticvoidDecryptFile(stringsInputFilename,
https://support.microsoft.com/ptbr/kb/307010 7/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
stringsOutputFilename,
stringsKey)
{
DESCryptoServiceProviderDES=newDESCryptoServiceProvider();
//A64bitkeyandIVisrequiredforthisprovider.
//SetsecretkeyForDESalgorithm.
DES.Key=ASCIIEncoding.ASCII.GetBytes(sKey);
//Setinitializationvector.
DES.IV=ASCIIEncoding.ASCII.GetBytes(sKey);
//Createafilestreamtoreadtheencryptedfileback.
FileStreamfsread=newFileStream(sInputFilename,
FileMode.Open,
FileAccess.Read);
//CreateaDESdecryptorfromtheDESinstance.
ICryptoTransformdesdecrypt=DES.CreateDecryptor();
//Createcryptostreamsettoreadanddoa
//DESdecryptiontransformonincomingbytes.
CryptoStreamcryptostreamDecr=newCryptoStream(fsread,
desdecrypt,
CryptoStreamMode.Read);
//Printthecontentsofthedecryptedfile.
StreamWriterfsDecrypted=newStreamWriter(sOutputFilename);
fsDecrypted.Write(newStreamReader(cryptostreamDecr).ReadToEnd());
fsDecrypted.Flush();
fsDecrypted.Close();
}
staticvoidMain()
{
//Mustbe64bits,8bytes.
//Distributethiskeytotheuserwhowilldecryptthisfile.
stringsSecretKey;
//GettheKeyforthefiletoEncrypt.
sSecretKey=GenerateKey();
//ForadditionalsecurityPinthekey.
GCHandlegch=GCHandle.Alloc(sSecretKey,GCHandleType.Pinned);
//Encryptthefile.
EncryptFile(@"C:\MyData.txt",
@"C:\Encrypted.txt",
sSecretKey);
//Decryptthefile.
DecryptFile(@"C:\Encrypted.txt",
@"C:\Decrypted.txt",
sSecretKey);
//RemovetheKeyfrommemory.
ZeroMemory(gch.AddrOfPinnedObject(),sSecretKey.Length*2);
gch.Free();
}
https://support.microsoft.com/ptbr/kb/307010 8/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
}
}
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
Propriedades
Palavras chave:
kbsecurity kbio kbcrypt kbhowtomaster kbmt KB307010 KbMtpt
Suporte
Segurana
Fale conosco
https://support.microsoft.com/ptbr/kb/307010 9/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
Portugus Brasil
Termos de uso Privacidade e cookies Marcas 2016 Microsoft
https://support.microsoft.com/ptbr/kb/307010 10/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
https://support.microsoft.com/ptbr/kb/307010 11/12
31/10/2016 ComocriptografaredescriptografarumarquivousandooVisualC#
https://support.microsoft.com/ptbr/kb/307010 12/12