por Romulo De Lazzari em 11/01/2007 as 01:22
AES (Advanced Encryption Standard), também chamado de Rijndael é um algorítmo de criptografia muito seguro para utilização em diversos sistemas, tanto de software como de hardware. Nesse link tem uma ótima explicação da história e do funcionamento do AES.Mas onde diabo eu uso isso em jogos? Sendo curto e grosso: tem tudo a ver! Imagine um jogo online com muitas trocas de mensagens, dentre elas mensagens importantes como usuarios e senhas para login, (no caso de um MMORPG) mensagens para trocas de itens entre usuários, mensagens de compra de objetos.
Hoje, voltando a desenvolver nosso trabalho de conclusão de curso, deparo-me com essa parte de criptografar e compactar (isso renderá um post futuro) dados para troca de mensagens entre cliente e servidor.
Estou implementando a parte do servidor, estou usando um Ubuntu Linux e compilando no g++. Mas chega de lenga-lenga e vamos ao que interessa!
Um cara chamado Szymon Stefanek escreveu uma classe em c++ para utilização do AES, baixe o codigo aqui. Descompacte o arquivo Depois crie um arquivo (no meu caso na mesma pasta onde estará os arquivos baixados, rijndael.h e rijndael.cpp) e mãos a obra:
C++:
-
////////////////////////////////
-
// CUBAGAMES EXEMPLO AES
-
// Autor: Romulo De Lazzari
-
// Data: 11/01/07
-
///////////////////////////////
-
//fazendo os includes necessários
-
#include "rijndael.cpp"
-
#include <string>
-
#include <iostream>
-
-
using namespace std;
-
-
int main()
-
{
-
//instanciando nosso objeto
-
Rijndael oAes;
-
-
//nossa chave de até 32 caracteres (chave de 32 bytes)
-
unsigned char sChave[32] = "chavechavechavechavechave";
-
-
//o texto que sera criptografado
-
const unsigned char *sText = (const unsigned char *) "texto que vai ser criptografado";
-
-
//tamanho do texto int iLen = strlen( (const char *)sText );
-
-
//variavel que guardará o texto criptografado
-
//note que ela tem que ser 16 caracteres maior que o texto que será criptografado
-
unsigned char sTextoCriptado[iLen + 16];
-
-
//iniciando o objeto oAes, passando as opções necessárias
-
//modo: pode ser Rijndael::CBC, Rijdael::EBC ou Rijdael::CBF1
-
//necessita criptografar e descriptografar usando o mesmo modo
-
//tipo: Rijndael::Encrypt ou Rijndael::Decrypt, criptografa ou decriptografa
-
//chave: a nossa chave
-
//e o tamanho da chave: nesse caso de 32 bytes
-
oAes.init(Rijndael::CBC, Rijndael::Encrypt, sChave, Rijndael::Key32Bytes);
-
-
//e xazam, Criptografa, caso dê algum erro, retorna -1
-
iLen = oAes.padEncrypt(sText, iLen, sTextoCriptado);
-
-
if(iLen <0)
-
{
-
cout <<"erro de criptografia" <<endl;
-
return 0;
-
}
-
//decriptografa, apenas usando o processo inverso
-
unsigned char sTextoDecriptado[iLen - 16];
-
-
//usando o método init novamente, mas passando o tipo como Decrypt
-
oAes.init(Rijndael::CBC, Rijndael::Decrypt, sChave, Rijndael::Key32Bytes);
-
-
//e decriptografando nossa mensagem
-
iLen = oAes.padDecrypt( sTextoCriptado, iLen, sTextoDecriptado);
-
-
//fazendo uma verificação e mostrando na tela o texto
-
if(iLen>= 0)
-
cout <<"Texto Descriptografado: " <<sTextoDecriptado <<endl;
-
//caso de algum erro
-
else
-
cout <<"Erro Decript: " <<iLen <<endl;
-
-
//finalizando a aplicação
-
return 0;
-
}
Bom o código ta ai. Acho que os comentários explicam bem seu funcionamento, ele tá beem simples!
Bom, é isso! Qualquer dúvida mande um comentário, abraços a todos!
Categorias: Desenvolvimento | No Comments »