Ruby中的单块AES解密

Tho*_*mas 5 ruby openssl cryptography aes

我需要玩一些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
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

现在我需要手动进行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
Run Code Online (Sandbox Code Playgroud)

它失败了

in `final': bad decrypt (OpenSSL::Cipher::CipherError)
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

jbt*_*ule 9

我假设您收到final错误,因为它默认使用填充.

decrypter.padding = 0
Run Code Online (Sandbox Code Playgroud)

另外,要使用ECB模式手动执行CBC模式,设置IV将不执行任何操作,您需要使用IV(或前一个密文块,如果您最终解密多个块)XOr解密的块.