我现在正在使用Botan库。
我想使用PKCS7填充模式使用AES / CBC模式加密我的文件。
Botan提供的AES / CBC解密会在发生错误时抛出异常并且我不确定它是否容易受到填充oracle攻击。
那么我应该如何执行解密过程以防止攻击呢?
更新:
即使我没有返回填充错误,文件也会保持不变,攻击者可以知道。
我的代码如下:( iv和键将被正确设置)
void encrypt(std::istream &in, std::ostream &out)
{
try
{
Botan::SymmetricKey key_t(key);
Botan::InitializationVector iv_t(iv);
Botan::Pipe encryptor(Botan::get_cipher(cipher_mode, key_t, iv_t, Botan::ENCRYPTION), new Botan::DataSink_Stream(out));
encryptor.start_msg();
in >> encryptor;
encryptor.end_msg(); // flush buffers, complete computations
}
catch(...)
{
throw;
}
}
void decrypt(std::istream &in, std::ostream &out)
{
try
{
Botan::SymmetricKey key_t(key);
Botan::InitializationVector iv_t(iv);
Botan::Pipe decryptor(Botan::get_cipher(cipher_mode, key_t, iv_t, Botan::DECRYPTION), new Botan::DataSink_Stream(out));
decryptor.start_msg();
in >> decryptor;
decryptor.end_msg(); // flush buffers, complete computations
}
catch(...)
{
throw;
}
}
答案 0 :(得分:0)
使用随机IV的CBC模式,只需将加密数据加上IV用于解密,它不需要保密。无需传入IV,让加密功能创建随机IV。