我需要使用一些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)
我该怎么办?
答案 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解密的块。