2009-10-27 2 views
4

Quel est l'équivalent de Crypt :: CBC en Perl pour Ruby?Perl & Ruby échange des informations cryptées AES

Remarque: Ce problème est similaire à PHP/Perl au stackoverflow:655691.

Perl version

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"); 

Ma version rubis ressemble à ceci:

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= 

Je suis assez sûr base64 travailler même en Ruby et Perl. Toute idée quelle est la bonne façon de faire?

Mise à jour (Solution)

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== 

Ruby

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" 

Répondre

6

J'ai quelque chose même pour Perl et 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

et il y a une astuce pour vous:

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

clé doit être de longueur 16. et mieux la longueur iv est de 16 caractères aussi.

J'espère que ça aide.

Merci.

+0

Merci beaucoup. Ça a marché! voir ma mise à jour ci-dessus. – Jirapong

Questions connexes