Encoding / decoding issues with AES-128-CBC

advertisements

So basically I have these snippets of code and would like them to produce the same output:

require 'openssl'
aes = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
aes.key = "aaaaaaaaaaaaaaaa"
aes.iv = "aaaaaaaaaaaaaaaa"
aes.encrypt
encrypted = aes.update("1234567890123456") << aes.final
puts encrypted.unpack('H*').join

This prints:

8d3bbffade308f8e4e80cb77ecb8df19ee933f75438cec1315c4a491bd1b83f4

And this Java code:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
String key = "aaaaaaaaaaaaaaaa";
String textToEncryptpt = "1234567890123456";

SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(key.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(textToEncryptpt.getBytes());
System.out.println(Crypto.bytesToHex(encrypted));

Prints:

2d3760f53b8b3dee722aed83224f418f9dd70e089ecfe9dc689147cfe0927ddb

Annoying thing is that it was working a couple of days ago... so I am not sure what happened. What's wrong with this code? Do you see anything unusual?


Ruby script is wrong. You have to first call the encrypt method, and then set the key and iv:

require 'openssl'
aes = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
aes.encrypt
aes.key = "aaaaaaaaaaaaaaaa"
aes.iv = "aaaaaaaaaaaaaaaa"
encrypted = aes.update("1234567890123456") << aes.final
puts encrypted.unpack('H*').join

I figured out because when trying to decode an encrypted string I got:

aescrypt.rb:13:in `final': bad decrypt (OpenSSL::Cipher::CipherError)
    from aescrypt.rb:13:in `<main>'