У меня есть существующий формат данных, части которого зашифрованы в том, что выглядит как AES в режиме CFB. Длина данных открытого текста и длина зашифрованных данных совпадают.
В С# почти каждый угол, который я использовал, кажется, ожидает, что зашифрованная длина будет кратной размеру блока... поэтому я получаю исключение, пытаясь расшифровать данные.
При поиске решений я использовал Crypto++ и написал быстрое приложение на C++, которое успешно расшифровывает данные, поэтому я почти уверен, что использую правильный алгоритм, ключ и IV. Это отлично работает, но я бы хотел, чтобы все было внутри С#, если это вообще возможно. Какие-либо предложения?
Рабочий код C++ ниже:
//define key
unsigned char key[16];
//populate key
//...
//define iv
unsigned char iv[16];
//populate iv
//...
std::ifstream inFile;
//open file
inFile.open("file.aes",ios::binary );
//get file size
inFile.seekg(0,ios::end);
int fileSize = (int) inFile.tellg();
inFile.seekg(offset, ios::beg);
//read/close file
char* inBytes = new char[fileSize];
inFile.read(inBytes,fileSize);
inFile.close();
//configure decryption
CFB_Mode<AES>::Decryption cfbDecryption(key, 16, iv);
//populate output bytes
char* outBytes = new char[fileSize];
cfbDecryption.ProcessData((byte*) outBytes,(byte*) inBytes,fileSize);
//open/write/close output file
std::ofstream outFile;
outFile.open("out.dec");
outFile.write(outBytes,fileSize);
outFile.close();
delete[] inBytes;