C++ 块长度-Rijndael算法

C++ 块长度-Rijndael算法,c++,encryption,C++,Encryption,我从这里下载了Rijndael的资料: 我有以下代码: int AutoUpdater::GetVersion() { std::ifstream file("ver.dat", std::ios::out ); if(file.fail()) return 0; file.seekg(0,std::ios::end); int len = (int)file.tellg(); file.seekg(0,std::ios::beg); char* line = new char[len

我从这里下载了Rijndael的资料:

我有以下代码:

int AutoUpdater::GetVersion()
{
std::ifstream file("ver.dat", std::ios::out );
if(file.fail())
    return 0;
file.seekg(0,std::ios::end);
int len = (int)file.tellg();
file.seekg(0,std::ios::beg);

char* line = new char[len];

file.read(line,len);
file.close();

CRijndael crypt;
crypt.MakeKey("MIUJkHyHnjHyGtqO", "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16, 16);

char * decrypted = new char[len];
crypt.Decrypt(line,decrypted,len);


delete[] line;
delete [] decrypted;

return atoi(line);
}
但它给出了这样一个错误:“数据不是块大小的倍数”


我要加密的文件必须有一个固定的长度?

用尾随的零填充它以填充块大小。你也可以考虑字节长度的前缀,以恢复原来的精确长度。

是的。Rijndael是一种分组密码。您应该使用前面的长度字段对数据进行编码。解码器可以安全地忽略长度字段以外的位。

Rijndael是一种分组密码。您的输入不需要固定长度,但需要是块大小的倍数(Rijndael为16字节)。有很多方法可以确保这一点。我喜欢PKCS7,很好很简单

我感到困惑的是,为什么输入文件不是块大小的倍数。您不可能使用Rijndael对数据进行正确加密,因为Rijndael提供了这样一个文件