2012-07-28 109 views
0

好吧,我下載從這裏的Rijndael來源:http://www.codeproject.com/Articles/1380/A-C-Implementation-of-the-Rijndael-Encryption-Decr塊長度 - 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); 
} 

但它給這個錯誤:「數據不可多塊大小」

我的文件加密必須有一個固定的長度?

回答

1

填充尾部零填充塊的大小。您還可以考慮在字節長度前加上字母,以恢復原始的精確長度。

0

是的。 Rijndael是分組密碼。您應該使用前面的長度字段對數據進行編碼。解碼器可以安全地忽略超出長度字段的位。

1

Rijndael是分組密碼。你的輸入不需要固定長度,但它需要是塊大小的倍數(Rijndael爲16字節)。有很多padding methods你可以用來確保。我喜歡PKCS7,很好,很簡單。

我很困惑的是爲什麼你的輸入文件不是塊大小的倍數。使用給你這樣的文件的Rijndael你無法正確加密數據。