5

いくつかの AES スニペットをいじる必要があります。

暗号文 c と鍵 k があります。暗号文は AES-CBC を使用して暗号化されており、IV が先頭に追加されています。パディングはありません。プレーン テキストの長さは 16 の倍数です。

だから私はこれをやっています:

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

そしてそれはうまく機能しています。

ここで、手動で CBC モードを実行する必要があるため、単一ブロックの「プレーンな」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)

どうすればいいのですか?

4

1 に答える 1

9

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

decrypter.padding = 0

また、ECB モードで CBC モードを手動で実行するには、IV を設定しても何も行われません。IV を使用して復号化されたブロック (または複数のブロックを復号化する場合は前の暗号文ブロック) を XOr する必要があります。

于 2013-04-18T15:14:04.753 に答える