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/perluse 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