Перечитывал тут ветки Вашего форума и увидел, что люди интересуются хорошим криптоалгоритмом для встраивания в микроконтроллеры с возможностью дистанционного апдейта софта. Могу предложить свой алгоритм, разработанный 5 лет назад, и прошедший всестороннюю обкатку. Он быстрее TEA и RC4, создает неповторяющиеся последовательности(если использовать в начале файла random bytes) и не требует проверки CRC распакованного файла(это происходит автоматически). Алгоритм очень похож на RC4 и SAPPHIRE, но создавался независимо и на других принципах, из RC4 был взят и доработан алгоритм разворачивания ключа.
Ах это ! Ну во-первых, это не сетевое приложение(к тому же досовское где длина командной строки ограничена 128 байтами), во-вторых buffer то статический и никакого переполнения быть не может(ну почти), в-третьих это лишь демонстрация алгоритма и написана за 15 минут, к тому же в моих реализациях вообще нет разворачивания ключа(развернутая таблица уже сидит во флеше)
мне оч понравился алгоритм простотой. но никак руки не дойдут потестеть, посмотреть как пашет. насторожили слова так вот не просче их самомтоятельно добавлять если они нужны при шифровании и удолять при дешифровке? если действительно надежный алго, почему бы его не использовать в проэктах...
я абсолютно не против любых переработок(доработок) алгоритма и за его распространение в любом виде(по возможности желательно не менять названия). Random bytes я добавляю исключительно для рандомизации при передаче абсолютно одинаковых файлов, а при приеме естественно их отбрасываю(ну почти,но это детали моих проектов). Кстати, при передаче я в конец файла добавляю сигнатуру(обычно 4 нуля), а при приеме ее проверяю. Это круче чем любой CRC !!!
Кстати, для изучения энтропии зашифрованных файлов удобно использовать какой-нибудь архиватор(например rar) или следующую drag&drop програмку
Тут умные люди посоветовали чуть-чуть изменить процедуру разворачивания ключа, а то раньше 6, 65, 654 - это один и тот же ключ Код (Text): void initialize_machine(void) { short x; for(x = 0; x < 256; x++) state[x] = x + key_length; for(x = 0; x < 256; x++) { xor += state[x] + key[x % key_length]; swap_byte(&state[x], &state[xor]); } }
ещё можно сделать для выровненных данных чтобы обрабатывался не один байт за раз, а к примеру dword, чуточку быстрее будет
2Avoidik Для данного алгоритма это невозможно да и нецелесообразно, т.к. данная процедура выполняется 1 раз на подготовительной стадии и на быстродействие вцелом не влияет, к тому же разговор начался про 8-битовые микроконтролеры
Я вот всё жду жду когда же гуру с ренг.ру паявяться и заплюют )) ну или хотя бы про стойкость расскажут А их всё нету ) Раптор? Дмит ? Ррельф наконец ? )))