What is the equivalent of Crypt :: CBC in Perl for Ruby?
Note. This problem is similar to php / perl on https://stackoverflow.com/a/21293416/11 .
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");
My ruby ββversion looks like this:
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
I'm sure Base64 works in Ruby and Perl. Anyone tell me how to do it right?
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);
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
source share