Заден план
От около ден се боря с дешифрирането на очевидно добре оформен шифрован текст. Да приемем, че имаме следния шестнадесетичен шифрован текст, който съдържа точно 160 знака, като по този начин има 80 байта.
QString c = "1BFAC407AF0D440A2D6176C0B5D125AA96088490299AC18C74623C0EF1BB1372E554FC4150A8066220E943697BE2491D8AE13AA036B298425AC510A8A917D59EBB69708B9040AB3A84C63043EAD4AB07";
QString k = CryptoUtils::hexEncode("abc");
QString p = CryptoUtils::decrypt(c, k);
qDebug() << p;
При условие, че използваме AES 256, AFAIK, ключът трябва да е с дължина 32 байта и шифрован текст с дължина, кратна на 16 байта, като всички тези условия са изпълнени по отношение на моя код на фрагмент.
Моля, обърнете внимание, че използвам SHA256 захранване с парола за генериране на 32-байтов ключ. Така че това гарантира, че всички ключове са с дължина 32 байта.
Пълните изходни кодове на тези функция може да се намери в моето репо в GitHub (в клон Part1).
Въпросът ми
Когато искам да стартирам този код, приложението ми се срива. Ето изключението:
terminate called after throwing an instance of 'CryptoPP::InvalidCiphertext'
what(): StreamTransformationFilter: invalid PKCS #7 block padding found
The program has unexpectedly finished.
Търсих наоколо за този проблем и разбрах, че може да се дължи на крайното \0
, след като сте шифровали обикновения текст. Не можех обаче просто да разреша проблема. Моля, помогнете ми, просто ме подлудява.
StringSource(decodedKey, size, true, new HashFilter(*(new SHA256), new ArraySink(key, AES::MAX_KEYLENGTH)));
: това не е добър KBKDF, той крие проблеми с ключа и по мое скромно мнение е доста нечетлив. Ако използвате нещо различно от библиотеката, към която сочите, дешифрирането със сигурност ще се провали (освен ако същото нестандартно хеширане не се приложи в другата библиотека, разбира се). - person Maarten Bodewes   schedule 09.12.2015encrypt
(от този cpp файл, към който се свързах). Освен това IV винаги е0
. За ключ не мога да видя какъв е проблемът с SHA256 (просто трябва да генерирам унифициран ключ от парола и за това просто няма значение кой алгоритъм трябва да използвам). - person frogatto   schedule 09.12.2015