Криптография. Вопрос по Des.

Тема в разделе "WASM.BEGINNERS", создана пользователем giIgi, 5 сен 2008.

  1. giIgi

    giIgi New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    7
    Код (Text):
    1. void desfunc(register unsigned long int *block, register unsigned long int *keys)
    2. {
    3.     register unsigned long int fval, work, right, leftt;
    4.     register int round;
    5.  
    6.     leftt = block[0];
    7.     right = block[1];
    8.  
    9.     work   = ((leftt >> 4) ^ right) & 0x0f0f0f0fL;
    10.     right ^= work;
    11.     leftt ^= (work << 4);
    12.     work   = ((leftt >> 16) ^ right) & 0x0000ffffL;
    13.     right ^= work;
    14.     leftt ^= (work << 16);
    15.  
    16.     work   = ((right >> 2) ^ leftt) & 0x33333333L;
    17.     leftt ^= work;
    18.     right ^= (work << 2);
    19.     work   = ((right >> 8) ^ leftt) & 0x00ff00ffL;
    20.     leftt ^= work;
    21.     right ^= (work << 8);
    22.  
    23.     right  = ((right << 1) | ((right >> 31) & 1L)) & 0xffffffffL;  
    24.     work   = (leftt ^ right) & 0xaaaaaaaaL;
    25.     leftt ^= work;
    26.     right ^= work;
    27.     leftt  = ((leftt << 1) | ((leftt >> 31) & 1L)) & 0xffffffffL;
    это фрагмент из Брюса Шнайдера "Прикладная криптография" это описание начала функции дес, дальше идет работа с s блоками. Так вот по идее в приведенном коде должны быть "начальная перестановка" "перестановка с расширением". Как-то все у них хитро получается, не могу понять как это тут перестановка делается? Кто может помочь написать пояснения к коду?
     
  2. giIgi

    giIgi New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2008
    Сообщения:
    7
    Наверно стоило писать в крипто...
    никто не подскажет?
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    blocks[0] = 0x01234567
    blocks[1] = 0x89ABCDEF
    и посмотреть результат выполненной процедуры. станет понятно что куда перестанавливается.
    здесь только начальная перестановка(initial permutation)