ruby perl cryptography aes rijndael

Perl & Ruby intercambian información encriptada AES



cryptography rijndael (1)

¿Cuál es el equivalente a Crypt :: CBC en Perl para Ruby?

Nota: Este problema es similar a PHP / Perl en stackoverflow: 655691 .

Versión Perl

use Crypt::CBC; use MIME::Base64::Perl; my $cipher = Crypt::CBC->new( -key => "95A8EE8E89979B9EFDCBC6EB9797528D", -keysize => 32, -cipher => "Crypt::OpenSSL::AES" ); $encypted = $cipher->encrypt("ABCDEFGH12345678"); $base64 = encode_base64($encypted); print("$base64"); # output -> U2FsdGVkX18m1jVqRTxANhcEj6aADeOn+2cccDft2eYAMfOkYCvAAkTIOv01VHc/ $de_base64 = decode_base64($base64); $decrypted = $cipher->decrypt($de_base64); $c = $cipher->finish; print("$decrypted /n");

Mi versión de rubí se ve así:

require ''openssl'' require ''base64'' aes = OpenSSL::Cipher::AES128.new("CBC") aes.encrypt aes.key = "95A8EE8E89979B9EFDCBC6EB9797528D" encypted = aes.update("ABCDEFGH12345678") + aes.final base64 = Base64.encode64(encypted) puts base64 # outout -> gx1K24LqlRUtNNTDNUJTyn7HrVKK6UkfNA9LNpNjZeE=

Estoy bastante seguro de que Base64 funciona igual en Ruby y Perl. ¿Alguna pista de cuál es la forma correcta de hacerlo?

Actualización (Solución)

use Crypt::CBC; use MIME::Base64; my $key = "95A8EE8E89979B9E"; my $iv = "1234567890abcdef"; my $cipher = Crypt::CBC->new( -key => $key, -cipher => ''Rijndael'', -iv => $iv, -literal_key => 1, -padding => ''null'', -keysize => 128/8, -header => ''none'' ); my $plaintext = $cipher->encrypt("Hello"); print encode_base64($plaintext); # output -> kJCpQC0+iNF8exHGx3GLYw==

Rubí

require ''openssl'' require ''base64'' aes = OpenSSL::Cipher::Cipher.new("aes-128-cbc") aes.decrypt aes.key = "95A8EE8E89979B9E" aes.iv = "1234567890abcdef" aes.padding = 0 base64 = Base64.decode64("kJCpQC0+iNF8exHGx3GLYw==") decrypted = aes.update(base64) decrypted << aes.final puts decrypted # guess? It is "Hello"


Tengo algo igual para Perl y php.

http://cpansearch.perl.org/src/FAYLAND/OpenSocialX-Shindig-Crypter-0.03/sample/crypt.pl http://cpansearch.perl.org/src/FAYLAND/OpenSocialX-Shindig-Crypter-0.03/sample /crypt.php

y hay un consejo para ti:

my $cipher = Crypt::CBC->new( { ''key'' => ''length16length16'', ''cipher'' => ''Rijndael'', ''iv'' => ''1234567890abcdef'', ''literal_key'' => 1, ''padding'' => ''null'', ''header'' => ''none'', keysize => 128 / 8 } );

la clave debe ser de longitud 16. y mejor la longitud de iv también es de 16 caracteres.

Espero que ayude.

Gracias.