ГОСТ-28147-89

Тема в разделе "WASM.CRYPTO", создана пользователем zobot1, 30 июн 2006.

  1. zobot1

    zobot1 New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2005
    Сообщения:
    55
    Здравствуйте

    Посмотрите пожалуйста правильно ли я понял механизм выработки имитовставки?



    (код типа для мебели, естна надо проезжать по всем данным, побитым по 64бита ну и производить замену)


    Код (Text):
    1.  
    2. #include <stdio.h>
    3. #include <stdlib.h>
    4. #include <string.h>
    5.  
    6. #define _DEBUG_C
    7.  
    8. typedef unsigned long long ulong64;
    9.  
    10.  
    11. static unsigned long ulKey[8] = {0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff, 0xffeeddcc, 0xbbaa9988, 0x77665544, 0x33221100};
    12. static unsigned char ucPlain[] = {"omiga rolet pererolet mazafaka"};
    13.  
    14.  
    15. ulong64 gost_sz16(ulong64* lpData)
    16. {
    17.     ulong64 u64Out;
    18.     static unsigned long ulLeft, ulRight, ulSmod, ulSxor;
    19.  
    20.     int i;
    21.  
    22.  
    23.     u64Out = *lpData;
    24.  
    25.  
    26. #ifdef _DEBUG_C
    27.     printf("we have data : %.16LX\n", u64Out);
    28. #endif
    29.  
    30.     ulLeft = (unsigned long)(u64Out>>32);
    31.     ulRight = (unsigned long)u64Out;
    32.  
    33.  
    34.  
    35.     for(i = 0; i < 16; i++)
    36.     {
    37. #ifdef _DEBUG_C
    38.     printf("L: %.8X\nR : %.8X\n", ulLeft, ulRight);
    39. #endif
    40.         ulSmod = ulKey[0] + ulRight;
    41.  
    42. #ifdef _DEBUG_C
    43.         printf("Smod : %.8X\n",ulSmod);
    44. #endif
    45.  
    46.         ulSxor = ulSmod ^ ulLeft;
    47.  
    48. #ifdef _DEBUG_C
    49.         printf("Sxor : %.8X\n",ulSxor);
    50. #endif
    51.  
    52.         ulLeft = ulRight;
    53.         ulRight = ulSxor;
    54.     }
    55.  
    56.  
    57.  
    58.     u64Out = (((ulong64)(ulLeft))<<32) | ulRight;
    59.  
    60.     return u64Out;
    61. }
    62.  




    ТО есть берём открытые данные (типа plain text), делим на 64бит блоки, если в последнем меньше - дополняем нулями. Потом гоним цикл простой замены 16 раз по каждому блоку - на выходе получаем 64битное число - типа имитовставка.



    одного только не догнал какого размера имитовставка нужна?

    И как получить из 64бит на выходе 32бита имитовставки - что отрезать и что оставить?
     
  2. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Возьми документы Андрея Винокурова, там все на пальцах