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.