# Rinjdael (AES) encryption in Ruby

**URL:** <https://www.ruby-forum.com/t/rinjdael-aes-encryption-in-ruby/78399>\
**Category:** Ruby\
**Created:** [December 5, 2006, 4:15pm UTC](https://www.ruby-forum.com/t/rinjdael-aes-encryption-in-ruby/78399 "2006-12-05T16:15:28Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 5, 2006, 4:15pm UTC](https://www.ruby-forum.com/t/rinjdael-aes-encryption-in-ruby/78399/1 "2006-12-05T16:15:28Z")

</div>

I’ve got a quick general question about encryption.

I’ve encrypted the same string with OpenSSL, ruby-aes, and Crypt, using  
the same cipher, key, and IV (I’ve slightly modified Crypt to accept an  
IV) and get different results for all of them.

If all of the variables are the same, why would this be happening?

---- Begin Code Snippit ([Parked at Loopia](http://pastie.caboo.se/25895))

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
