2013-04-14 9 views
5

私はいくつかのAESスニペットで遊ぶ必要があります。RubyのシングルブロックAES解読

暗号文cと鍵kがあります。暗号文は、AES-CBCを使用して暗号化されており、IVが前置されています。

aes = OpenSSL::Cipher::Cipher.new("AES-128-CCB") 
aes.decrypt 
aes.key = k 
aes.iv = c[0..15] 
aes.update(c[16..63]) + aes.final 

、それがうまく働いている:いいえパディングが存在しない、プレーンテキストの長さは、だから私はこれをやっている16

の倍数です。

私はCBCモードを手作業で行う必要があるので、1ブロックの「プレーンな」AES解読が必要です。

私はこれしようとしている:

aes = OpenSSL::Cipher::Cipher.new("AES-128-ECB") 
aes.decrypt 
aes.key = k 
aes.iv = c[0..15] 
aes.update(c[16..31]) + aes.final 

をそして、それは

in `final': bad decrypt (OpenSSL::Cipher::CipherError) 

私はそれをどのように行うのですかで失敗?

+0

「iv」を設定しないのはどうですか?なぜなら、EBCモードでは「iv」は存在しないからです。 –

答えて

9

デフォルトではパディングを使用しているため、finalエラーが発生していると仮定します。

decrypter.padding = 0 

はまたIVは何もしません設定、ECBモードと手動CBCモードを実行するには、IV(or the previous ciphertext block if you end up decrypting more than one block)で復号ブロックをXORする必要があります。

+0

ゼロ、ゼロではありません!すばらしいです! – Thomas

+0

ありがとうございます@jbtule – Trip

関連する問題