Всем добрый вечер. Хочу написать простой алгоритм шифрования, есть входной файл я его читаю уксками по 32 бита (dword), потом эти куски xor-ю с таким же куском полученым от генератора случайных чисел. Как я понял мне нужен генератор который на выходе дает тоже 32 битное число (буду искать, если у кого есть линк буду благодарен). Пишу на делфи и использую вставки на асме. Помимо ксора я еще хочу сделать перемешивание, т.е. я хочу после ксора в 32 - битном куске полученого шифротекста поменять первые произвольные N бит на последние N бит полученые от аналогичного куска полученого с генератора случайных чисел. N - будет постоянно менятся. Как реализовать подобные вещи. Я тут нечто набросал function cript(cryp_x:dword); var rand_x:dword; orig:dword //кусок прочитаного текста N:byte; rand_x:=longint_rnd; // etu shtyky nado eche skacat' ... asm mov eax, orig xor eax, rand_x shr eax, N ... end; Если чего напартачил внутри паскалевской функции то я поправлю, меня интересует вставка на асме.
Прежде чем изобретать свое, нужно четко понимать, чем конкретно вас не устраивают готовые известные и проверенные решения. Почитайте вот эту тему и сделайте выводы: http://www.wasm.ru/forum/viewtopic.php?id=25267
биты при шифровании обычно перемешивают так - разбивают блок на две равные части a и b. Было: a ! b Стало: (a xor b) ! a Такая штука называется раундом скремблирования. вот тебе важнейший и единственный криптопримитив =))). Сделай несколько раундов, все биты перемешаются основательно. Между раундами можешь там еще поксорить и повращать, чтобы еще сильней запутать, потом бац - преобразование пекаря и бифуркация =))). Правда блок у тебя очень маленький - машинное слово, это скорее на поточник тянет.
Спасибо за совет. Я еще с другой стороны думаю о быстодествии, т.е. хочу найти некий оптимум между быстодействием, надежностьюю и новизной. А читаю 32 бита, так как думаю что через регистры это все будет делатся быстрее, если нет растолкуйте.
Могу посоветовать посмотреть на мой вариант для примера, может поможет. Там есть и поточный вариант по 32 бита.
Спасибо, распакую и буду анализировать. А вообще надо будет почитать литературы о классической оптимизации алгоритмов.