Você está na página 1de 8

Juliano Marcon: Criptografia Rijndael em C# Page 1 of 8

Compartilhar Denunciar abuso Próximo blog» Criar um blog Login

Juliano Marcon
Analista / Programador C# .net

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 2 of 8

SEXTA-FEIRA, 8 DE JANEIRO DE 2010

INSCREVER-SE
Criptografia Rijndael em C#

Em diversos casos é necessário um processo de segurança em nossos dados. Um dos algorítmos


mais seguros e usados atualmente é o Rijndael, também conhecido com AES.

O Rijndael é um algoritmo simétrico de chave variável (os valores possíveis para o tamanho das
QUEM SOU EU
chaves são: 128bits, 192bits, 256bits) o que dificulta muito o trabalho de quebra dos valores. Ele está
disponível a partir do .net framework 3.5. Juliano Marcon
Analista /
Para utilizar este recurso é necessário importar o namespace de criptografia, assim: Programador
C# .net
using System.Security.Cryptography; Visualizar meu perfil completo

Abaixo segue a classe de criptografia utilizando esse recurso:


PESQUISAR ESTE BLOG

public class Criptografia Pesquisar


powered by

/// <summary> SEGUIDORES


/// Vetor de bytes utilizados para a criptografia (Chave Externa) Seguir
/// </summary> Google Friend Connect

private static byte[] bIV = { 0x50, 0x08, 0xF1, 0xDD, 0xDE, 0x3C, 0xF2, 0x18,
0x44, 0x74, 0x19, 0x2C, 0x53, 0x49, 0xAB, 0xBC }; Ainda não há seguidores.
Seja o primeiro!

/// <summary>
/// Representação de valor em base 64 (Chave Interna)
Já é um membro?Fazer login
/// </summary>
private const string cryptoKey =
ARQUIVO DO BLOG
"Q3JpcHRvZ3JhZmlhcyBjb20gUmluamRhZWwgLyBBRVM=";
▼ 2010 (23)
// O Valor acima representa a transformação para base64 de
► Outubro (3)
// um conjunto de 32 caracteres (8 * 32 = 256bits)
// A chave é: "Criptografias com Rijndael / AES" ► Setembro (3)
► Junho (2)
/// <summary>
► Abril (1)
/// Metodo de criptografia de valor
► Março (3)
/// </summary>
/// <param name="text">valor a ser criptografado</param> ► Fevereiro (2)
/// <returns>valor criptografado</returns> ▼ Janeiro (9)
public static string Encrypt(string text) Coloração de código
{
C# e os Delegates.
try
{ FamFamFam - conjunto de
ícones para sistemas
// Se a string não está vazia, executa a criptografia
if (!string.IsNullOrEmpty(text)) Criptografia Rijndael em C#
{ Windows 7 em GodMode
// Cria instancias de vetores de bytes com as chaves
Temas para o
byte[] bText , bKey; TabContainer (C# /
bKey = ASP.NET)
Convert.FromBase64String(cryptoKey); Tipos de dados em C#
bText =
Feliz ano novo!
new UTF8Encoding().GetBytes(text);
Feliz ano novo!
// Instancia a classe de criptografia Rijndael
Rijndael rijndael = new RijndaelManaged();

// Define o tamanho da chave "256 = 8 * 32"


// Lembre-se: chaves possíves:
// 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)
rijndael.KeySize = 256;

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 3 of 8

// Cria o espaço de memória para guardar o valor criptografado:


MemoryStream mStream = new MemoryStream();

// Instancia o encriptador
CryptoStream encryptor =

new CryptoStream(
mStream ,
rijndael.CreateEncryptor(bKey , IV) ,

CryptoStreamMode.Write);

// Faz a escrita dos dados criptografados no espaço de memória


encryptor.Write(bText , 0 , bText.Length);
// Despeja toda a memória.
encryptor.FlushFinalBlock();

// Pega o vetor de bytes da memória e gera a string criptografada

return Convert.ToBase64String(mStream.ToArray());
}
else
{
// Se a string for vazia retorna nulo
return null;
}
}
catch (Exception ex)
{
// Se algum erro ocorrer, dispara a exceção
throw new ApplicationException("Erro ao criptografar" , ex);
}
}

/// <summary>
/// Metodo de descriptografia
/// </summary>
/// <param name="text">texto criptografado</param>
/// <returns>valor descriptografado</returns>
public static string Decrypt(string text)
{
try
{
// Se a string não está vazia, executa a criptografia
if (!string.IsNullOrEmpty(text))
{
// Cria instancias de vetores de bytes com as chaves
byte[] bText , bKey;
bKey = Convert.FromBase64String(cryptoKey);
bText =
Convert.FromBase64String(text);

// Instancia a classe de criptografia Rijndael


Rijndael rijndael = new RijndaelManaged();

// Define o tamanho da chave "256 = 8 * 32"


// Lembre-se: chaves possíves:
// 128 (16 caracteres), 192 (24 caracteres) e 256 (32 caracteres)
rijndael.KeySize = 256;

// Cria o espaço de memória para guardar o valor DEScriptografado:


MemoryStream mStream = new MemoryStream();

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 4 of 8

// Instancia o Decriptador

CryptoStream decryptor =

new CryptoStream(

mStream ,

rijndael.CreateDecryptor(bKey , IV) ,

CryptoStreamMode.Write);

// Faz a escrita dos dados criptografados no espaço de memória


decryptor.Write(bText , 0 , bText.Length);
// Despeja toda a memória.
decryptor.FlushFinalBlock();

// Instancia a classe de codificação para que a string venha de forma correta


UTF8Encoding utf8 = new UTF8Encoding();
// Com o vetor de bytes da memória, gera a string descritografada em UTF8
return utf8.GetString(mStream.ToArray());
}
else
{
// Se a string for vazia retorna nulo
return null;
}
}
catch (Exception ex)
{
// Se algum erro ocorrer, dispara a exceção
throw new ApplicationException("Erro ao descriptografar" , ex);
}
}
}

Acredito que o código esteja bem documentado.

Maiores informações sobre o algoritmo veja:


http://pt.wikipedia.org/wiki/AES

E uma animação MUITO BOA sobre o processo que o algoritmo faz pode ser encontrada
em: http://blog.ultrassecreto.com/?p=17

Original em: http://julianomarcon.posterous.com/criptografia-rijndael-em-c

Postado por Juliano Marcon às 05:12

0 comentários:

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 5 of 8

Postar um comentário

Comentar como: Selecionar perfil...

Postar comentário Visualizar

Postagem mais recente Início Postagem mais antiga

Assinar: Postar comentários (Atom)

Picture Window modelo de Josh Peterson. Imagens de modelo por 5ugarless. Tecnologia do Blogger.

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 6 of 8

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 7 of 8

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010
Juliano Marcon: Criptografia Rijndael em C# Page 8 of 8

http://julianomarcon.blogspot.com/2010/01/criptografia-rijndael-em-c.html 20/10/2010