Исходные тексты на языке C алгоритмов шифрования DES, ГОСТ, IDEA, Blowfish, страница 6
Описание файла
PDF-файл из архива "Исходные тексты на языке C алгоритмов шифрования DES, ГОСТ, IDEA, Blowfish", который расположен в категории "". Всё это находится в предмете "математические основы криптологии" из 6 семестр, которые можно найти в файловом архиве МАИ. Не смотря на прямую связь этого архива с МАИ, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "математические основы криптологии" в общих файлах.
Просмотр PDF-файла онлайн
Текст 6 страницы из PDF
*/for (i=0;i<64;i++){p = a & 0x7fc;b += key->t[p/4];a = ROT9(a);b ^= a;qcbc= b & 0x7fc;^= key->t[q/4];= ROT9(b);+= b;pdcd= (p+c) & 0x7fc;+= key->t[p/4];= ROT9(c);^= c;qada= (q+d) & 0x7fc;^= key->t[q/4];= ROT9(d);+= d;p = (p+a) & 0x7fc;b ^= key->t[p/4];a = ROT9(a);q = (q+b) & 0x7fc;c += key->t[q/4];b = ROT9(b);p = (p+c) & 0x7fc;d ^= key->t[p/4];c = ROT9(c);q = (q+d) & 0x7fc;a += key->t[q/4];d = ROT9(d);*wp = b + key->s[4*i];wp++;*wp = c ^ key->s[4*i+1];wp++;*wp = d + key->s[4*i+2];wp++;*wp = a ^ key->s[4*i+3];wp++;if (i & 1){a += n3;c += n4;}else{a += n1;c += n2;}}}}return (ALG_OK);/* Added call to refill ks_buf and reset counter and ks_pos.
*/void seal_refill_buffer(seal_ctx *c){seal(c,c->counter,c->ks_buf);c->counter++;c->ks_pos = 0;}void seal_key(seal_ctx *c, unsigned char *key){seal_init(c,key);c->counter = 0; /* By default, init to zero. */c->ks_pos = WORDS_PER_SEAL_CALL;/* Refill keystream buffer on next call. */}/* This encrypts the next w words with SEAL. */void seal_encrypt(seal_ctx *c, unsigned long *data_ptr, int w){int i;}for(i=0;i<w;i++){if(c->ks_pos>=WORDS_PER_SEAL_CALL) seal_refill_buffer(c);data_ptr[i]^=c->ks_buf[c->ks_pos];c->ks_pos++;}void seal_decrypt(seal_ctx *c, unsigned long *data_ptr, int w) {seal_encrypt(c,data_ptr,w);}void seal_resynch(seal_ctx *c, unsigned long synch_word){c->counter = synch_word;c->ks_pos = WORDS_PER_SEAL_CALL;}void main(void){seal_ctx sc;unsigned long buf[1000],t;int i,flag;unsigned char key[] ={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};printf("1\n");seal_key(&sc,key);printf("2\n");for(i=0;i<1000;i++) buf[i]=0;printf("3\n");seal_encrypt(&sc,buf,1000);printf("4\n");t = 0;for(i=0;i<1000;i++) t = t ^ buf[i];printf("XOR of buf is %08lx.\n",t);seal_key(&sc,key);seal_decrypt(&sc,buf,1);seal_decrypt(&sc,buf+1,999);flag = 0;for(i=0;i<1000;i++) if(buf[i]!=0)flag=1;if(flag) printf("Decrypt failed.\n");else printf("Decrypt succeeded.\n");}.