Ruby中的单块AES解密

时间:2013-04-14 13:11:48

标签: ruby cryptography openssl 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

它的工作正常。

现在我需要手动进行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)

我该怎么办?

1 个答案:

答案 0 :(得分:9)

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

decrypter.padding = 0

另外,要使用ECB模式手动进行CBC模式,设置IV将无效,您需要使用IV(or the previous ciphertext block if you end up decrypting more than one block)XOr解密的块。