|
||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[197] data = (data << 8) key[j]; j = j + 1; if (j >= keybytes) { c->P[i] = c->P[i] л data; } datal = 0x00000000; datar = 0x00000000; for (i = 0; i < N + 2; i += 2) { Blowfish encipher(c,&datal, &datar); c->P[i] = datal; c->P[i + 1]= datar; for (i = 0; i < 4;{ for (j = 0;j < 256; j += 2) { Blowfish encipher(c,&datal, &datar); c->S[i][j] = datal; c->S[i][j + 1] = datar; void blf key(blf ctx *c, char *k, int len){ InitializeBlowfish(c,k,len); void blf enc(blf ctx *c, unsigned long *data, int blocks){ unsigned long *d; int i; d = data; for(i=0;i<blocks;i++){ Blowfish encipher(c,d,d+1); d += 2; void blf dec(blf ctx *c, unsigned long *data, int blocks){ unsigned long *d; int i; d = data; for(i=0;i<blocks;i++){ Blowfish decipher(c,d,d+1); d += 2; void main(void){ blf ctx c; char key[]="AAAAA"; unsigned long data[10]; int i; for(i=0;i<10;i++) data[i] = i; blf key(&c,key,5); blf enc(&c,data,5); blf dec(&c,data,1); blf dec(&c,data+2,4); for(i=0;i<10;i+=2) printf("Block %01d decrypts to: %08lx %08lx.\n", i/2,data[i],data[i+1]); #define STRT E 0x0b0b /* round constant of first encryption round */ #define STRT D 0xb1b1 /* round constant of first decryption round */ #defineNMBR11 /* number of rounds is 11*/ typedef unsigned long int word32 ; /* the program only works correctly if long = 32bits */ typedef unsigned long u4; typedef unsigned char u1; typedef struct { u4 k[3],ki[3], ercon[NMBR+1],drcon[NMBR+1]; } twy ctx; /* Note: encrypt and decrypt expect full blocks--padding blocks is callers responsibility. All bulk encryption is done in ECB mode by these calls. Other modes may be added easily enough.*/ /* destroy: Context. */ /* Scrub context of all sensitive data. */ void twy destroy(twy ctx *); /* encrypt: Context, ptr to data block, # of blocks. */ void twy enc(twy ctx *, u4 *, int); /* decrypt: Context, ptr to data block, # of blocks. */ void twy dec(twy ctx *, u4 *, int); /* key: Context, ptr to key data. */ void twy key(twy ctx *, u4 *); /* ACCODE----------------------------------------------------------- */ /* End of AC code prototypes and structures.*/ /* */ void mu(word32 *a)/* inverts the order of the bits of a */ int i ; word32 b[3] ; b[0] = b[1] = b[2] = 0 ; for( i=0 ; i<32 ; i++ ) { b[0] <<= 1 ; b[1] <<= 1 ; b[2] <<= 1 ; if(a[0]&1) b[2] = 1 ; if(a[1]&1) b[1] = 1 ; if(a[2]&1) b[0] = 1 ; a[0] >>= 1 ; a[1] >>= 1 ; a[2] >>= 1 ; a[0] = b[0] ; a[1] = b[1] ; a[2] = b[2] ; } voidgamma(word32 *a) /* the nonlinear step */ word32b[3]; b[0]=a[0]л (a[1](~a[2])) ; b[1]=a[1]л (a[2](~a[0])) ; b[2]=a[2]л (a[0](~a[1])) ; a[0]=b[0]; a[1] = b[1] ; a[2] = b[2] ; } void theta(word32 *a) /* the linear step */ word32 b[3]; b[0] = a[0] л (a[0]>>16)л(a[1]<<16)л(a[1]>>16)л(a[2]<<16)л (a[1]>>24)л(a[2]<<8)л(a[2]>>8)л(a[0]<<24)л (a[2]>>16)л(a[0]<<16)л(a[2]>>24)л(a[0]<<8); b[1] = a[1] л (a[1]>>16)л(a[2]<<16)л(a[2]>>16)л(a[0]<<16)л (a[2]>>24)л(a[0]<<8)л(a[0]>>8)л(a[1]<<24)л (a[0]>>16)л(a[1]<<16)л(a[0]>>24)л(a[1]<<8); b[2] = a[2] л (a[2]>>16)л(a[0]<<16)л(a[0]>>16)л(a[1]<<16)л (a[0]>>24)л(a[1]<<8)л(a[1]>>8)л(a[2]<<24)л (a[1]>>16)л(a[2]<<16)л(a[1]>>24)л(a[2]<<8); a[0] = b[0] ; a[1] = b[1] ; a[2] = b[2] ; } void pi 1(word32 *a) a[0] = (a[0]>>10) л (a[0]<<22); a[2] = (a[2]<<1) л (a[2]>>31); void pi 2(word32 *a) a[0] = (a[0]<<1) л (a[0]>>31); a[2] = (a[2]>>10) л (a[2]<<22); void rho(word32 *a) /* the round function*/ theta(a) ; pi 1(a) ; gamma(a) ; pi 2(a) ; void rndcon gen(word32 strt,word32 *rtab) {/* generates the round constants */ int i ; for(i=0 ; i<=NMBR ; i++ ) |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||