« Отговор #1 -: Mar 03, 2011, 02:34 »
Нещата са общи навсякъде. Не съм ползвал crypto++, предимно openssl и botan, също така що се отнася до DES - сам съм си реализирал алгоритъма, включително в bitslice вид.
В общи линии има няколко неща, които могат да се осерат. Първото и най-важното е режима на криптиране - CBC, ECB, XTR и т.н. Това е най-важното нещо, не знам как се прави там, но предполагам имаш някакви тестови вектори, които трябва да сравняваш и не ти излизат.
Почти всички режими на опериране на блоковите шифри изискват начален вектор (IV), единствено ECB режима не го изисква,щото всеки блок е сам за себе си. Внимавай какъв ти е IV-а, иначе може и да не си нагодиш test vector-a.
Другото е padding-a, има няколко варианта, но най-често се ползва PKCS5. При него като не достигаш нещо кратно на block size-a, падваш съобщението с колкото трябва байтове равни на разликата между големината на съобщението и големината на съобщението ти до следващия блок. примерно съобщението ти е AAA а блока ти е 32 бита, паднатото съобщение е AAA\01. Обаче някои малоумни библиотеки pad-ват с нулеви байтове примерно и това чупи последния блок ако не е кратен на block size-a.
Всичко останало е стандартно и се ползваат стандартни примитиви, които дават очаквани резултати. Та в крайна сметка важните неща са да даваш правилния IV, правилния режим на работа ако има избор - правилния padding mode. Друго трудно може да се осере.
A, при 3DES може би още едно нещо може да се осере, има няколко варианта там, но май си имаше стандарт. Имаше някакви дивотии дали да се ползват 3 различни ключа или 2 различни ключа и криптиране-декриптиране-криптиране, като meet in the middle атаките свеждат сложността на двете до една и съща стойност. Има си стандарт за това, ма не ги помня тези неща вече.
П.П препоръчвам ти на първо време да си поиграеш с DES в ECB режим, най-лесно ще ти излезнат test vector-ите. Block size-a е най-малък (64 бита) и ключа тоже (64 бита, но всеки 8-ми бит няма значение щото е parity и почти винаги се ignore-ва - openssl примерно въобще не му пука какво има там - така че все едно блока ти е 64 бита, а ключа - 56-битов).