2009-10-27 2 views
4

Что такое эквивалент Crypt :: CBC в Perl для Ruby?Perl & Ruby exchange AES зашифрованная информация

Примечание: Эта проблема аналогична PHP/Perl по адресу stackoverflow:655691.

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

Моя рубин версия выглядит следующим образом:

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= 

Я уверен, что Base64 работают же в Ruby, и Perl. Есть ли какие-нибудь подсказки, как правильно это сделать?

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

Рубин

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" 

ответ

6

У меня есть что-то же самое для Perl и 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

и есть совет для вас:

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

ключ должен быть длиной 16 и более длина IV составляет 16 символов тоже.

Надеюсь, это поможет.

Спасибо.

+0

спасибо. Это сработало! см. мое обновление выше. – Jirapong

Смежные вопросы