TripleDES Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa a classe base para algoritmos Padrão de Criptografia de Dados Triplos dos quais todas as TripleDES implementações devem derivar.
public ref class TripleDES abstract : System::Security::Cryptography::SymmetricAlgorithm
public abstract class TripleDES : System.Security.Cryptography.SymmetricAlgorithm
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class TripleDES : System.Security.Cryptography.SymmetricAlgorithm
type TripleDES = class
inherit SymmetricAlgorithm
[<System.Runtime.InteropServices.ComVisible(true)>]
type TripleDES = class
inherit SymmetricAlgorithm
Public MustInherit Class TripleDES
Inherits SymmetricAlgorithm
- Herança
- Derivado
- Atributos
Exemplos
O exemplo de código a seguir mostra como criar e usar um TripleDES objeto para criptografar e descriptografar dados em um arquivo.
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class TripleDESSample
{
static void Main()
{
try
{
byte[] key;
byte[] iv;
// Create a new TripleDES object to generate a random key
// and initialization vector (IV).
using (TripleDES tripleDes = TripleDES.Create())
{
key = tripleDes.Key;
iv = tripleDes.IV;
}
// Create a string to encrypt.
string original = "Here is some data to encrypt.";
// The name/path of the file to write.
string filename = "CText.enc";
// Encrypt the string to a file.
EncryptTextToFile(original, filename, key, iv);
// Decrypt the file back to a string.
string decrypted = DecryptTextFromFile(filename, key, iv);
// Display the decrypted string to the console.
Console.WriteLine(decrypted);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static void EncryptTextToFile(string text, string path, byte[] key, byte[] iv)
{
try
{
// Create or open the specified file.
using (FileStream fStream = File.Open(path, FileMode.Create))
// Create a new TripleDES object.
using (TripleDES tripleDes = TripleDES.Create())
// Create a TripleDES encryptor from the key and IV
using (ICryptoTransform encryptor = tripleDes.CreateEncryptor(key, iv))
// Create a CryptoStream using the FileStream and encryptor
using (var cStream = new CryptoStream(fStream, encryptor, CryptoStreamMode.Write))
{
// Convert the provided string to a byte array.
byte[] toEncrypt = Encoding.UTF8.GetBytes(text);
// Write the byte array to the crypto stream.
cStream.Write(toEncrypt, 0, toEncrypt.Length);
}
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
throw;
}
}
public static string DecryptTextFromFile(string path, byte[] key, byte[] iv)
{
try
{
// Open the specified file
using (FileStream fStream = File.OpenRead(path))
// Create a new TripleDES object.
using (TripleDES tripleDes = TripleDES.Create())
// Create a TripleDES decryptor from the key and IV
using (ICryptoTransform decryptor = tripleDes.CreateDecryptor(key, iv))
// Create a CryptoStream using the FileStream and decryptor
using (var cStream = new CryptoStream(fStream, decryptor, CryptoStreamMode.Read))
// Create a StreamReader to turn the bytes back into text
using (StreamReader reader = new StreamReader(cStream, Encoding.UTF8))
{
// Read back all of the text from the StreamReader, which receives
// the decrypted bytes from the CryptoStream, which receives the
// encrypted bytes from the FileStream.
return reader.ReadToEnd();
}
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
throw;
}
}
}
Imports System.IO
Imports System.Security.Cryptography
Imports System.Text
Module TripleDESSample
Sub Main()
Try
Dim key As Byte()
Dim iv As Byte()
' Create a new TripleDES object to generate a key
' and initialization vector (IV).
Using tripleDes As TripleDES = TripleDES.Create
key = tripleDes.Key
iv = tripleDes.IV
End Using
' Create a string to encrypt.
Dim original As String = "Here is some data to encrypt."
' The name/path of the file to write.
Dim filename As String = "CText.enc"
' Encrypt the string to a file.
EncryptTextToFile(original, filename, key, iv)
' Decrypt the file back to a string.
Dim decrypted As String = DecryptTextFromFile(filename, key, iv)
' Display the decrypted string to the console.
Console.WriteLine(decrypted)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
Sub EncryptTextToFile(text As String, path As String, key As Byte(), iv As Byte())
Try
' Create or open the specified file.
' Create a new TripleDES object,
' Create a TripleDES encryptor from the key and IV,
' Create a CryptoStream using the MemoryStream And encryptor
Using fStream As FileStream = File.Open(path, FileMode.Create),
tripleDes As TripleDES = TripleDES.Create,
encryptor As ICryptoTransform = tripleDes.CreateEncryptor(key, iv),
cStream = New CryptoStream(fStream, encryptor, CryptoStreamMode.Write)
' Convert the passed string to a byte array.
Dim toEncrypt As Byte() = Encoding.UTF8.GetBytes(text)
' Write the byte array to the crypto stream.
cStream.Write(toEncrypt, 0, toEncrypt.Length)
End Using
Catch e As CryptographicException
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message)
Throw
End Try
End Sub
Function DecryptTextFromFile(path As String, key As Byte(), iv As Byte()) As String
Try
' Open the specified file
' Create a new TripleDES object.
' Create a TripleDES decryptor from the key and IV
' Create a CryptoStream using the MemoryStream and decryptor
' Create a StreamReader to turn the bytes back into text
Using mStream As FileStream = File.OpenRead(path),
tripleDes As TripleDES = TripleDES.Create,
decryptor As ICryptoTransform = tripleDes.CreateDecryptor(key, iv),
cStream = New CryptoStream(mStream, decryptor, CryptoStreamMode.Read),
reader = New StreamReader(cStream, Encoding.UTF8)
' Read back all of the text from the StreamReader, which receives
' the decrypted bytes from the CryptoStream, which receives the
' encrypted bytes from the FileStream.
Return reader.ReadToEnd()
End Using
Catch e As CryptographicException
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message)
Return Nothing
End Try
End Function
End Module
O exemplo de código a seguir mostra como criar e usar um TripleDES objeto para criptografar e descriptografar dados na memória.
using System;
using System.Security.Cryptography;
using System.Text;
using System.IO;
class TripleDESSample2
{
static void Main()
{
try
{
byte[] key;
byte[] iv;
// Create a new TripleDES object to generate a random key
// and initialization vector (IV).
using (TripleDES tripleDes = TripleDES.Create())
{
key = tripleDes.Key;
iv = tripleDes.IV;
}
// Create a string to encrypt.
string original = "Here is some data to encrypt.";
// Encrypt the string to an in-memory buffer.
byte[] encrypted = EncryptTextToMemory(original, key, iv);
// Decrypt the buffer back to a string.
string decrypted = DecryptTextFromMemory(encrypted, key, iv);
// Display the decrypted string to the console.
Console.WriteLine(decrypted);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
public static byte[] EncryptTextToMemory(string text, byte[] key, byte[] iv)
{
try
{
// Create a MemoryStream.
using (MemoryStream mStream = new MemoryStream())
{
// Create a new TripleDES object.
using (TripleDES tripleDes = TripleDES.Create())
// Create a TripleDES encryptor from the key and IV
using (ICryptoTransform encryptor = tripleDes.CreateEncryptor(key, iv))
// Create a CryptoStream using the MemoryStream and encryptor
using (var cStream = new CryptoStream(mStream, encryptor, CryptoStreamMode.Write))
{
// Convert the provided string to a byte array.
byte[] toEncrypt = Encoding.UTF8.GetBytes(text);
// Write the byte array to the crypto stream and flush it.
cStream.Write(toEncrypt, 0, toEncrypt.Length);
// Ending the using statement for the CryptoStream completes the encryption.
}
// Get an array of bytes from the MemoryStream that holds the encrypted data.
byte[] ret = mStream.ToArray();
// Return the encrypted buffer.
return ret;
}
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
throw;
}
}
public static string DecryptTextFromMemory(byte[] encrypted, byte[] key, byte[] iv)
{
try
{
// Create a buffer to hold the decrypted data.
// TripleDES-encrypted data will always be slightly bigger than the decrypted data.
byte[] decrypted = new byte[encrypted.Length];
int offset = 0;
// Create a new MemoryStream using the provided array of encrypted data.
using (MemoryStream mStream = new MemoryStream(encrypted))
{
// Create a new TripleDES object.
using (TripleDES tripleDes = TripleDES.Create())
// Create a TripleDES decryptor from the key and IV
using (ICryptoTransform decryptor = tripleDes.CreateDecryptor(key, iv))
// Create a CryptoStream using the MemoryStream and decryptor
using (var cStream = new CryptoStream(mStream, decryptor, CryptoStreamMode.Read))
{
// Keep reading from the CryptoStream until it finishes (returns 0).
int read = 1;
while (read > 0)
{
read = cStream.Read(decrypted, offset, decrypted.Length - offset);
offset += read;
}
}
}
// Convert the buffer into a string and return it.
return Encoding.UTF8.GetString(decrypted, 0, offset);
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
throw;
}
}
}
Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Module MemorySample
Sub Main()
Try
Dim key As Byte()
Dim iv As Byte()
' Create a new TripleDES object to generate a key
' and initialization vector (IV).
Using tripleDes As TripleDES = TripleDES.Create
key = tripleDes.Key
iv = tripleDes.IV
End Using
' Create a string to encrypt.
Dim original As String = "Here is some data to encrypt."
' Encrypt the string to an in-memory buffer.
Dim encrypted As Byte() = EncryptTextToMemory(original, key, iv)
' Decrypt the buffer back to a string.
Dim decrypted As String = DecryptTextFromMemory(encrypted, key, iv)
' Display the decrypted string to the console.
Console.WriteLine(decrypted)
Catch e As Exception
Console.WriteLine(e.Message)
End Try
End Sub
Function EncryptTextToMemory(text As String, key As Byte(), iv As Byte()) As Byte()
Try
' Create a MemoryStream.
Using mStream As New MemoryStream
' Create a new TripleDES object,
' Create a TripleDES encryptor from the key and IV,
' Create a CryptoStream using the MemoryStream And encryptor
Using tripleDes As TripleDES = TripleDES.Create,
encryptor As ICryptoTransform = tripleDes.CreateEncryptor(key, iv),
cStream = New CryptoStream(mStream, encryptor, CryptoStreamMode.Write)
' Convert the passed string to a byte array.
Dim toEncrypt As Byte() = Encoding.UTF8.GetBytes(text)
' Write the byte array to the crypto stream and flush it.
cStream.Write(toEncrypt, 0, toEncrypt.Length)
' Ending the using block for the CryptoStream completes the encryption.
End Using
' Get an array of bytes from the MemoryStream that holds the encrypted data.
Dim ret As Byte() = mStream.ToArray()
' Return the encrypted buffer.
Return ret
End Using
Catch e As CryptographicException
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message)
Throw
End Try
End Function
Function DecryptTextFromMemory(encrypted As Byte(), key As Byte(), iv As Byte()) As String
Try
' Create a buffer to hold the decrypted data.
' TripleDES-encrypted data will always be slightly bigger than the decrypted data.
Dim decrypted(encrypted.Length - 1) As Byte
Dim offset As Integer = 0
' Create a new MemoryStream using the provided array of encrypted data.
' Create a new TripleDES object.
' Create a TripleDES decryptor from the key and IV
' Create a CryptoStream using the MemoryStream and decryptor
Using mStream As New MemoryStream(encrypted),
tripleDes As TripleDES = TripleDES.Create,
decryptor As ICryptoTransform = tripleDes.CreateDecryptor(key, iv),
cStream = New CryptoStream(mStream, decryptor, CryptoStreamMode.Read)
' Keep reading from the CryptoStream until it finishes (returns 0).
Dim read As Integer = 1
While (read > 0)
read = cStream.Read(decrypted, offset, decrypted.Length - offset)
offset += read
End While
End Using
' Convert the buffer into a string and return it.
Return New ASCIIEncoding().GetString(decrypted, 0, offset)
Catch e As CryptographicException
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message)
Return Nothing
End Try
End Function
End Module
Comentários
TripleDES usa três iterações sucessivas do DES algoritmo. Ele pode usar duas ou três chaves de 56 bits.
Note
Um algoritmo de criptografia simétrica mais recente, AES (Advanced Encryption Standard), está disponível. Considere usar a Aes classe e suas classes derivadas em vez da TripleDES classe. Use TripleDES apenas para compatibilidade com aplicativos e dados herdados.
Esse algoritmo dá suporte a comprimentos de chave de 128 bits a 192 bits em incrementos de 64 bits.
Construtores
| Nome | Description |
|---|---|
| TripleDES() |
Inicializa uma nova instância da classe TripleDES. |
Campos
| Nome | Description |
|---|---|
| BlockSizeValue |
Representa o tamanho do bloco, em bits, da operação criptográfica. (Herdado de SymmetricAlgorithm) |
| FeedbackSizeValue |
Representa o tamanho dos comentários, em bits, da operação criptográfica. (Herdado de SymmetricAlgorithm) |
| IVValue |
Representa o vetor de inicialização (IV) para o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| KeySizeValue |
Representa o tamanho, em bits, da chave secreta usada pelo algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| KeyValue |
Representa a chave secreta para o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| LegalBlockSizesValue |
Especifica os tamanhos de bloco, em bits, compatíveis com o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| LegalKeySizesValue |
Especifica os tamanhos de chave, em bits, compatíveis com o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| ModeValue |
Representa o modo de criptografia usado no algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| PaddingValue |
Representa o modo de preenchimento usado no algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
Propriedades
| Nome | Description |
|---|---|
| BlockSize |
Obtém ou define o tamanho do bloco, em bits, da operação criptográfica. (Herdado de SymmetricAlgorithm) |
| FeedbackSize |
Obtém ou define o tamanho dos comentários, em bits, da operação criptográfica para os modos de criptografia cfb (comentários de criptografia) e comentários de saída (OFB). (Herdado de SymmetricAlgorithm) |
| IV |
Obtém ou define o vetor de inicialização (IV) para o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| Key |
Obtém ou define a chave secreta do TripleDES algoritmo. |
| KeySize |
Obtém ou define o tamanho, em bits, da chave secreta usada pelo algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| LegalBlockSizes |
Obtém os tamanhos de bloco, em bits, compatíveis com o algoritmo simétrico. |
| LegalBlockSizes |
Obtém os tamanhos de bloco, em bits, compatíveis com o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| LegalKeySizes |
Obtém os tamanhos de chave, em bits, compatíveis com o algoritmo simétrico. |
| LegalKeySizes |
Obtém os tamanhos de chave, em bits, compatíveis com o algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| Mode |
Obtém ou define o modo de operação do algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
| Padding |
Obtém ou define o modo de preenchimento usado no algoritmo simétrico. (Herdado de SymmetricAlgorithm) |
Métodos
| Nome | Description |
|---|---|
| Clear() |
Libera todos os recursos usados pela SymmetricAlgorithm classe. (Herdado de SymmetricAlgorithm) |
| Create() |
Cria uma instância de um objeto criptográfico para executar o TripleDES algoritmo. |
| Create(String) |
Cria uma instância de um objeto criptográfico para executar a implementação especificada do TripleDES algoritmo. |
| CreateDecryptor() |
Cria um objeto de descriptografador simétrico com a propriedade atual Key e o vetor de inicialização (IV). (Herdado de SymmetricAlgorithm) |
| CreateDecryptor(Byte[], Byte[]) |
Quando substituído em uma classe derivada, cria um objeto de descriptografia simétrico com a propriedade especificada Key e o vetor de inicialização (IV). (Herdado de SymmetricAlgorithm) |
| CreateEncryptor() |
Cria um objeto criptografador simétrico com a propriedade atual Key e o vetor de inicialização (IV). (Herdado de SymmetricAlgorithm) |
| CreateEncryptor(Byte[], Byte[]) |
Quando substituído em uma classe derivada, cria um objeto criptografador simétrico com a propriedade especificada Key e o vetor de inicialização (IV). (Herdado de SymmetricAlgorithm) |
| Dispose() |
Libera todos os recursos usados pela instância atual da SymmetricAlgorithm classe. (Herdado de SymmetricAlgorithm) |
| Dispose(Boolean) |
Libera os recursos não gerenciados usados pelo SymmetricAlgorithm e, opcionalmente, libera os recursos gerenciados. (Herdado de SymmetricAlgorithm) |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GenerateIV() |
Quando substituído em uma classe derivada, gera um vetor de inicialização aleatório (IV) a ser usado para o algoritmo. (Herdado de SymmetricAlgorithm) |
| GenerateKey() |
Quando substituído em uma classe derivada, gera uma chave aleatória (Key) a ser usada para o algoritmo. (Herdado de SymmetricAlgorithm) |
| GetHashCode() |
Serve como a função hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| IsWeakKey(Byte[]) |
Determina se a chave especificada é fraca. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
| ValidKeySize(Int32) |
Determina se o tamanho da chave especificado é válido para o algoritmo atual. (Herdado de SymmetricAlgorithm) |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IDisposable.Dispose() |
Esta API dá suporte à infraestrutura do produto e não deve ser usada diretamente do seu código. Libera os recursos não gerenciados usados pelo SymmetricAlgorithm e, opcionalmente, libera os recursos gerenciados. (Herdado de SymmetricAlgorithm) |