ECB is broken
#!/usr/bin/env ruby require 'openssl' # AES-128 ECB mode test vectors KEY = ["2b7e151628aed2a6abf7158809cf4f3c"].pack("H*") PLAINTEXT = ["6bc1bee22e409f96e93d7e117393172a"].pack("H*") CIPHERTEXT = ["3ad77bb40d7a3660a89ecaf32466ef97"].pack("H*") cipher = OpenSSL::Cipher::Cipher.new("aes-128-ecb") cipher.key = KEY cipher.padding = 0 # Padding is enabled by default o_O puts "test encrypt : " cipher.encrypt ciphertext = cipher.update(PLAINTEXT) << cipher.final if ciphertext == CIPHERTEXT puts "OK!" else puts "FAILED!" end puts "test decrypt : " cipher.reset cipher.decrypt plaintext = cipher.update(CIPHERTEXT) << cipher.final if plaintext == PLAINTEXT puts "OK!" else puts "FAILED!" end
Updated by jeremyevans0 (Jeremy Evans) 24 days ago
- Status changed from Assigned to Closed
This is because
encrypt is called after
key, which goes against the documentation. It is not specific to ECB. This is fixed by https://github.com/ruby/openssl/pull/263, which raises an exception for this broken code instead of silently failing.