require 'crypt/rijndael' require 'base64' require 'ruby-aes/aes' require 'openssl' # Modify Crypt::Rijndael lib to accept an IV module Crypt class Rijndael def vector() @vector; end alias orig_initialize initialize def initialize(key, vector, keyBits = 256, blockBits = 128) @vector = vector orig_initialize(key, keyBits, blockBits) end alias orig_generate_initialization_vector generate_initialization_vector def generate_initialization_vector( *p ) @vector || orig_generate_initialization_vector( *p ) end def iv_length() block_size; end end end def test_crypt_encryption key = '0123456789abcdef0123456789abcdef' rijndael = Crypt::Rijndael.new( key, 128, 128 ) raise Base64.encode64( rijndael.encrypt_string( 'abcdef' ) ) # returns 'F2wpWlldcZPQlfHOBWZatk8Zq9XNHMRJiB0vC04rZEE=' end def test_openssl_encryption key = '0123456789abcdef0123456789abcdef' alg = "AES-256-CBC" iv = 'abcdefghijklmnop' aes = OpenSSL::Cipher::Cipher.new(alg) aes.encrypt aes.key = key aes.iv = iv out = aes.update('abcdef') out << aes.final raise Base64.encode64(out) # returns 'jQeE5X55BSwJQav1VV w1g==' end def test_aes_encryption key = '0123456789abcdef0123456789abcdef' iv = 'abcdefghijklmnop' raise Base64.encode64( Aes.encrypt_buffer(128, 'CBC', key, iv, 'abcdef') ) # returns 'fa3taon6wtaPGQ4KgmLrCQ==' end