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++:
  1. ////////////////////////////////
  2. // CUBAGAMES EXEMPLO AES
  3. // Autor: Romulo De Lazzari
  4. // Data: 11/01/07
  5. ///////////////////////////////
  6. //fazendo os includes necessários
  7. #include "rijndael.cpp"
  8. #include <string>
  9. #include <iostream>
  10.  
  11. using namespace std;
  12.  
  13. int main()
  14. {
  15. //instanciando nosso objeto
  16. Rijndael oAes;
  17.  
  18. //nossa chave de até 32 caracteres (chave de 32 bytes)
  19. unsigned char sChave[32] = "chavechavechavechavechave";
  20.  
  21. //o texto que sera criptografado
  22. const unsigned char *sText = (const unsigned char *) "texto que vai ser criptografado";
  23.  
  24. //tamanho do texto  int iLen = strlen( (const char *)sText );
  25.  
  26. //variavel que guardará o texto criptografado
  27. //note que ela tem que ser 16 caracteres maior que o texto que será criptografado
  28. unsigned char sTextoCriptado[iLen + 16];
  29.  
  30. //iniciando o objeto oAes, passando as opções necessárias
  31. //modo: pode ser Rijndael::CBC, Rijdael::EBC ou Rijdael::CBF1
  32. //necessita criptografar e descriptografar usando o mesmo modo
  33. //tipo: Rijndael::Encrypt ou Rijndael::Decrypt, criptografa ou decriptografa
  34. //chave: a nossa chave
  35. //e o tamanho da chave: nesse caso de 32 bytes
  36. oAes.init(Rijndael::CBC, Rijndael::Encrypt, sChave, Rijndael::Key32Bytes);
  37.  
  38. //e xazam, Criptografa, caso dê algum erro, retorna -1
  39. iLen = oAes.padEncrypt(sText, iLen, sTextoCriptado);
  40.  
  41. if(iLen &lt;0)
  42. {
  43. cout &lt;&lt;"erro de criptografia" &lt;&lt;endl;
  44. return 0;
  45. }
  46. //decriptografa, apenas usando o processo inverso
  47. unsigned char sTextoDecriptado[iLen - 16];
  48.  
  49. //usando o método init novamente, mas passando o tipo como Decrypt
  50. oAes.init(Rijndael::CBC, Rijndael::Decrypt, sChave, Rijndael::Key32Bytes);
  51.  
  52. //e decriptografando nossa mensagem
  53. iLen = oAes.padDecrypt( sTextoCriptado, iLen, sTextoDecriptado);
  54.  
  55. //fazendo uma verificação e mostrando na tela o texto :D
  56. if(iLen&gt;= 0)
  57. cout &lt;&lt;"Texto Descriptografado: " &lt;&lt;sTextoDecriptado &lt;&lt;endl;
  58. //caso de algum erro
  59. else
  60. cout &lt;&lt;"Erro Decript: " &lt;&lt;iLen &lt;&lt;endl;
  61.  
  62. //finalizando a aplicação
  63. return 0;
  64. }

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 »


Deixe um comentário