sexta-feira, 26 de julho de 2013

Criptografia AES de 256 bits de chaves simétricas com Perl

Bom dia a todos!

Hoje vou demonstrar como é possível decodificar uma informação codificada com algoritmo AES de 256 bis a partir de uma chave já gerada e de um iv já gerado e encodados com base 64. Lembrando que a forma mais segura de trafegar os dados por uma rede é encoda-los em alguma base, a base mais comum é a 64 mas existem outras, com um pouco de pesquisa vão descobrir outros métodos que possam servi-los melhor, por fim acredito que Base 64 deva servir para quase todos os propósitos mais comuns de criptografia. É importante testar seus algoritmos de criptografia e descriptografia em mais de uma linguagem para provar que o seu código não está ligado a apenas uma linguagem, por exemplo, criptografar e encodar em java e depois decodificar em Perl como o exemplo abaixo faz. O algoritmo AES está muito bem explicado aqui ( link ) . Vamos ao código em perl, lembrando que é preciso ter os pacotes "Crypt::CBC" e "MIME::Base64" . Para baixa-los, no processo padrão, é só usar cpanm + "nome do pacote" , se o cpanm estiver instalado em seu ambiente de desenvolvimento. Eu estou desenvolvendo com windows atualmente e isso não funcionou comigo, tive que digitar "cpan" no "cmd" e lá dentro e digitar "install "nomedo::Pacote"". Vamos ao código:

------------------------------------------------------------------------------------------------
#!/usr/bin/perl
use Crypt::CBC;
use MIME::Base64;

# /*Requisicao:     texto=vivaobrasil
# Resposta:       status=0, texto-criptografado=t7rvuxbe6dBRfhDjlFPjtw==,
# IV=ABESpFdKYLTkiqkOdA+F+A==, key-id=2929
# symmetric key   :"bncM9yhZfwxF5NomWErbIrvbaZmE3AwPcMxgSneROiU="
# */

my  $dataPlain = "Sole Deo Gloria";
my  $keyundecoded  ="bncM9yhZfwxF5No3WErbIrvbaZmEfAwPcMxgSneROi4=";
my  $key    = decode_base64($keyundecoded);
my  $ivundecoded = "1234567890123456789012=="; # precisa ter 16 bytes decoded
my  $iv     = decode_base64($ivundecoded);
my  $encriptedData = "t7rvuxbe6dBRfhDjlFPjtw==";
my  $encriptedDecodedData = decode_base64($encriptedData);


my $cipher = Crypt::CBC->new({
    key         => $key,
    cipher      => "Crypt::Rijndael",
    iv          => $iv,
    literal_key => 1,
    header      => "none",
    keysize     => 32
});

my $encryptedData = $cipher->encrypt($dataPlain);

print "\n Encrypted is : +$encriptedData";
my  $plaintext  = $cipher->decrypt($encryptedData);
print "\n Decrypted is : $plaintext" ;

------------------------------------------------------------------------------------------------

Fim.

Nenhum comentário:

Postar um comentário