Здравствуйте Посмотрите пожалуйста правильно ли я понял механизм выработки имитовставки? (код типа для мебели, естна надо проезжать по всем данным, побитым по 64бита ну и производить замену) Код (Text): #include <stdio.h> #include <stdlib.h> #include <string.h> #define _DEBUG_C typedef unsigned long long ulong64; static unsigned long ulKey[8] = {0x00112233, 0x44556677, 0x8899aabb, 0xccddeeff, 0xffeeddcc, 0xbbaa9988, 0x77665544, 0x33221100}; static unsigned char ucPlain[] = {"omiga rolet pererolet mazafaka"}; ulong64 gost_sz16(ulong64* lpData) { ulong64 u64Out; static unsigned long ulLeft, ulRight, ulSmod, ulSxor; int i; u64Out = *lpData; #ifdef _DEBUG_C printf("we have data : %.16LX\n", u64Out); #endif ulLeft = (unsigned long)(u64Out>>32); ulRight = (unsigned long)u64Out; for(i = 0; i < 16; i++) { #ifdef _DEBUG_C printf("L: %.8X\nR : %.8X\n", ulLeft, ulRight); #endif ulSmod = ulKey[0] + ulRight; #ifdef _DEBUG_C printf("Smod : %.8X\n",ulSmod); #endif ulSxor = ulSmod ^ ulLeft; #ifdef _DEBUG_C printf("Sxor : %.8X\n",ulSxor); #endif ulLeft = ulRight; ulRight = ulSxor; } u64Out = (((ulong64)(ulLeft))<<32) | ulRight; return u64Out; } ТО есть берём открытые данные (типа plain text), делим на 64бит блоки, если в последнем меньше - дополняем нулями. Потом гоним цикл простой замены 16 раз по каждому блоку - на выходе получаем 64битное число - типа имитовставка. одного только не догнал какого размера имитовставка нужна? И как получить из 64бит на выходе 32бита имитовставки - что отрезать и что оставить?