· 6 years ago · Nov 26, 2019, 02:36 PM
1
2Bit Stuffing
3#include <stdio.h>
4#include<string.h>
5#include<stdlib.h>
6int main()
7{
8 char data[50],stuff[80],destuff[80];
9 int i,j=0,len,count=0,ch;
10 do
11 {
12 printf("Enter the Choice 1.Stuff 2.Destuff 3.Exit :--");
13 scanf("%d",&ch);
14 switch(ch)
15 {
16 case 1:
17 printf("Enter the Frame");
18 scanf("%s",data);
19 len=strlen(data);
20 for(int i=0;i<len;i++)
21 {
22 if(data[i]=='1')
23 {
24 count++;
25 }
26 else
27 {
28 count=0;
29 }
30 stuff[j]=data[i];
31 j++;
32 if(count==5)
33 {
34 stuff[j]='0';
35 j++;
36 count=0;
37 }
38 }
39 stuff[j]='\0';
40 printf("After Stuffing \n %s",stuff);
41 break;
42case 2:
43len=strlen(stuff);
44count=0;j=0;
45for(int i=0;i<len;i++)
46 {
47 if(stuff[i]=='1')
48 {
49 count++;
50 }
51 else
52 {
53 count=0;
54 }
55destuff[j]=stuff[i];
56j++;
57if(count==5)
58 {
59 count=0;
60 i++;
61 }
62destuff[j]='\0';
63 }
64printf("After Destuffing \n %s",destuff);
65break;
66case 3:
67exit(0);
68break;
69}
70}
71while(ch<4);
72return 0;
73}
74
75
76
77
78
79
80
81
82
83
84
85Character Stuffing or Byte Stuffing
86#include<stdio.h>
87#include<stdlib.h>
88int main()
89{
90char c[50],d[50],t[50];
91int i,m,j,ch;
92do
93{
94 printf("\n Enter the Choice 1.Stuff 2.Destuff 3.Exit :--");
95 scanf("%d",&ch);
96 switch(ch)
97 {
98 case 1:
99 printf("Enter the Number of Characters\n");
100scanf("%d",&m);
101printf("\n Enter the Original Data \n");
102for(i=0;i<m+1;i++)
103{
104scanf("%c",&c[i]);
105}
106d[0]='D';
107d[1]='L';
108d[2]='E';
109d[3]='S';
110d[4]='T';
111d[5]='X';
112for(i=0,j=6;i<m+1;i++,j++)
113{
114if((c[i]=='d'&&c[i+1]=='l'&& c[i+2]=='e'))
115{
116d[j]='D';
117j++;
118d[j]='L';
119j++;
120d[j]='E';
121j++;
122m=m+3;
123}
124
125d[j]=c[i];
126}
127m=m+6;
128m++;
129d[m]='D';
130m++;
131d[m]='L';
132m++;
133d[m]='E';
134m++;
135d[m]='E';
136m++;
137d[m]='T';
138m++;
139d[m]='X';
140m++;
141printf("\n Transmitted Data: \n");
142for(i=0;i<m;i++)
143{
144printf("%c",d[i]);
145}
146break;
147case 2:
148for(i=6,j=0;i<m-6;i++,j++)
149{
150if(d[i]=='D'&&d[i+1]=='L'&&d[i+2]=='E'&&d[i+3]=='d'&&d[i+4]=='l'&&d[i+5]=='e')
151i=i+3;
152t[j]=d[i];
153}
154printf("\n\n Received data:");
155for(i=0;i<j;i++)
156{printf("%c",t[i]);
157}
158break;
159case 3:
160exit(0);
161break;
162}
163}
164while(ch<4);
165return 0;
166}
167CYCLIC REDUNDENCY CHECK
168#include<stdio.h>
169void main()
170{
171 int i,j,k,l;
172
173 //Get Frame
174 int fs;
175 printf("\n Enter Frame size: ");
176 scanf("%d",&fs);
177
178 int f[20];
179
180 printf("\n Enter Frame:");
181 for(i=0;i<fs;i++)
182 {
183 scanf("%d",&f[i]);
184 }
185
186 //Get Generator
187 int gs;
188 printf("\n Enter Generator size: ");
189 scanf("%d",&gs);
190
191 int g[20];
192
193 printf("\n Enter Generator:");
194 for(i=0;i<gs;i++)
195 {
196 scanf("%d",&g[i]);
197 }
198
199 printf("\n Sender Side:");
200 printf("\n Frame: ");
201 for(i=0;i<fs;i++)
202 {
203 printf("%d",f[i]);
204 }
205 printf("\n Generator :");
206 for(i=0;i<gs;i++)
207 {
208 printf("%d",g[i]);
209 }
210
211 //Append 0's
212 int rs=gs-1;
213 printf("\n Number of 0's to be appended:%d",rs);
214
215
216for (i=fs;i<fs+rs;i++)
217 {
218 f[i]=0;
219 }
220
221 int temp[20];
222 for(i=0;i<20;i++)
223 {
224 temp[i]=f[i];
225 }
226
227 printf("\n Message after appending 0's :");
228 for(i=0; i<fs+rs;i++)
229 {
230 printf("%d",temp[i]);
231 }
232
233 //Division
234 for(i=0;i<fs;i++)
235 {
236 j=0;
237 k=i;
238 //check whether it is divisible or not
239 if (temp[k]>=g[j])
240 {
241 for(j=0,k=i;j<gs;j++,k++)
242 {
243 if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
244 {
245 temp[k]=0;
246 }
247 else
248 {
249 temp[k]=1;
250 }
251 }
252 }
253 }
254
255 //CRC
256 int crc[15];
257 for(i=0,j=fs;i<rs;i++,j++)
258 {
259 crc[i]=temp[j];
260 }
261
262 printf("\n CRC bits: ");
263 for(i=0;i<rs;i++)
264
265
266{
267 printf("%d",crc[i]);
268 }
269
270 printf("\n Transmitted Frame: ");
271 int tf[15];
272 for(i=0;i<fs;i++)
273 {
274 tf[i]=f[i];
275 }
276 for(i=fs,j=0;i<fs+rs;i++,j++)
277 {
278 tf[i]=crc[j];
279 }
280 for(i=0;i<fs+rs;i++)
281 {
282 printf("%d",tf[i]);
283 }
284
285 printf("\n Receiver side : ");
286 printf("\n Received Frame: ");
287 for(i=0;i<fs+rs;i++)
288 {
289 printf("%d",tf[i]);
290 }
291
292 for(i=0;i<fs+rs;i++)
293 {
294 temp[i]=tf[i];
295 }
296
297 //Division
298 for(i=0;i<fs+rs;i++)
299 {
300 j=0;
301 k=i;
302 if (temp[k]>=g[j])
303 {
304 for(j=0,k=i;j<gs;j++,k++)
305 {
306 if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
307 {
308 temp[k]=0;
309 }
310 else
311 {
312 temp[k]=1;
313 }
314 }
315
316 }
317 }
318
319 printf("\n Reaminder: ");
320 int rrem[15];
321 for (i=fs,j=0;i<fs+rs;i++,j++)
322 {
323 rrem[j]= temp[i];
324 }
325 for(i=0;i<rs;i++)
326 {
327 printf("%d",rrem[i]);
328 }
329
330 int flag=0;
331 for(i=0;i<rs;i++)
332 {
333 if(rrem[i]!=0)
334 {
335 flag=1;
336 }
337 }
338
339 if(flag==0)
340 {
341printf("\n Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Correct");
342 }
343 else
344 {
345 printf("\n Since Remainder Is Not 0 Hence Message Transmitted From Sender To Receriver Contains Error");
346 }
347
348}
349DIJKSTRA
350#include<stdio.h>
351#include<conio.h>
352#define INFINITY 9999
353#define MAX 10
354
355void dijkstra(int G[MAX][MAX],int n,int startnode);
356
357int main()
358{
359 int G[MAX][MAX],i,j,n,u;
360 printf("Enter no. of vertices:");
361 scanf("%d",&n);
362 printf("\nEnter the adjacency matrix:\n");
363
364 for(i=0;i<n;i++)
365 for(j=0;j<n;j++)
366 scanf("%d",&G[i][j]);
367
368 printf("\nEnter the starting node:");
369 scanf("%d",&u);
370 dijkstra(G,n,u);
371
372 return 0;
373}
374
375void dijkstra(int G[MAX][MAX],int n,int startnode)
376{
377
378 int cost[MAX][MAX],distance[MAX],pred[MAX];
379 int visited[MAX],count,mindistance,nextnode,i,j;
380
381 //pred[] stores the predecessor of each node
382 //count gives the number of nodes seen so far
383 //create the cost matrix
384 for(i=0;i<n;i++)
385 for(j=0;j<n;j++)
386 if(G[i][j]==0)
387 cost[i][j]=INFINITY;
388 else
389 cost[i][j]=G[i][j];
390
391 //initialize pred[],distance[] and visited[]
392 for(i=0;i<n;i++)
393 {
394 distance[i]=cost[startnode][i];
395 pred[i]=startnode;
396 visited[i]=0;
397 }
398
399 distance[startnode]=0;
400 visited[startnode]=1;
401 count=1;
402
403 while(count<n-1)
404 {
405 mindistance=INFINITY;
406
407 //nextnode gives the node at minimum distance
408 for(i=0;i<n;i++)
409 if(distance[i]<mindistance&&!visited[i])
410 {
411 mindistance=distance[i];
412 nextnode=i;
413 }
414
415
416
417
418 //check if a better path exists through nextnode
419 visited[nextnode]=1;
420 for(i=0;i<n;i++)
421 if(!visited[i])
422 if(mindistance+cost[nextnode][i]<distance[i])
423 {
424 distance[i]=mindistance+cost[nextnode][i];
425 pred[i]=nextnode;
426 }
427 count++;
428 }
429 //print the path and distance of each node
430 for(i=0;i<n;i++)
431 if(i!=startnode)
432 {
433 printf("\nDistance of node%d=%d",i,distance[i]);
434 printf("\nPath=%d",i);
435
436 j=i;
437 do
438 {
439 j=pred[j];
440 printf("<-%d",j);
441 }while(j!=startnode);
442 }
443}
444DVR
445#include<stdio.h>
446#include<stdlib.h>
447void rout_table();
448int d[10][10],via[10][10];
449int i,j,k,l,m,n,g[10][10],temp[10][10],ch,cost;
450int main()
451{
452 printf("enter the value of no. of nodes\n");
453scanf("%d",&n);
454rout_table();
455for(i=0;i<n;i++)
456for(j=0;j<n;j++)
457temp[i][j]=g[i][j];
458for(i=0;i<n;i++)
459for(j=0;j<n;j++)
460via[i][j]=i;
461while(1)
462{
463for(i=0;i<n;i++)
464for(j=0;j<n;j++)
465if(d[i][j])
466for(k=0;k<n;k++)
467if(g[i][j]+g[j][k]<g[i][k])
468{
469g[i][k]=g[i][j]+g[j][k];
470via[i][k]=j;
471}
472for(i=0;i<n;i++)
473{
474printf("table for router %c\n" ,i+97);
475for(j=0;j<n;j++)
476printf("%c:: %d via %c\n" ,j+97,
477g[i][j],via[i][j]+97);
478}
479break;
480}
481}
482
483void rout_table()
484{
485printf("\nEnter the routing table : \n");
486printf("\t|");
487for(i=1;i<=n;i++)
488printf("%c\t",i+96);
489printf("\n");
490for(i=0;i<=n;i++)
491printf("-------");
492printf("\n");
493for(i=0;i<n;i++)
494{
495printf("%c |",i+97);
496for(j=0;j<n;j++)
497{
498scanf("%d",&g[i][j]);
499if(g[i][j]!=999)
500d[i][j]=1;
501}
502}
503}
504SUBNET HOST
505#include<stdio.h>
506int a[10][10],n;
507main()
508{
509int i,j,root;
510printf("Enter no.of nodes:");
511scanf("%d",&n);
512printf("Enter adjacent matrix\n");
513for(i=1;i<=n;i++)
514for(j=1;j<=n;j++)
515{
516printf("Enter connecting of %d-->%d::",i,j);
517scanf("%d",&a[i][j]);
518}
519printf("Enter root node:");
520scanf("%d",&root);
521adj(root);
522}
523adj(int k){ int i,j;
524printf("Adjacent node of root node::\n"); printf("%d\n\n",k);
525for(j=1;j<=n;j++)
526{
527if(a[k][j]==1 || a[j][k]==1)
528printf("%d\t",j);
529}
530printf("\n");
531for(i=1;i<=n;i++)
532{
533if((a[k][j]==0) && (a[i][k]==0) && (i!=k)) printf("%d",i);
534}
535}
536OUTPUT:
537Enter no.of nodes:4
538Enter adjacent matrix:
539Enter connecting of 1-->1::0
540Enter connecting of 1-->2::1 Enter connecting of 1-->3::1
541Enter connecting of 1-->4::1
542Enter connecting of 2-->1::1
543Enter connecting of 2-->2::0
544Enter connecting of 2-->3::0
545Enter connecting of 2-->4::1
546Enter connecting of 3-->1::1
547Enter connecting of 3-->2::0
548Enter connecting of 3-->3::0
549Enter connecting of 3-->4::1
550Enter connecting of 4-->1::1
551Enter connecting of 4-->2::3
552Enter connecting of 4-->3::1
553Enter connecting of 4-->4::0
554
555
556
557Enter root node:2
558Adjacent node of root node:: 2
5591 4
560
5613
562DES
563#include<stdio.h>
564#include<conio.h>
565#include<string.h>
566int p10[]={3,5,2,7,4,10,1,9,8,6},
567p8[]={6,3,7,4,8,5,10,9},
568p4[]={2,4,3,1};
569int ip[]={2,6,3,1,4,8,5,7},
570ipinv[]={4,1,3,5,7,2,8,6},
571ep[]={4,1,2,3,2,3,4,1};
572int s0[][4]={{1,0,3,2,},{3,2,1,0},{0,2,1,3,},{3,1,3,2}};
573int s1[][4]={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};
574void permute(char op[],char ip[],int p[], int n){
575int i;
576for(i=0;i<n;i++)
577op[i]=ip[p[i]-1];
578op[i]='\0';
579}
580void circularls(char pr[],int n){
581int i;
582char ch=pr[0];
583for(i=0;i<n-1;i++)
584pr[i]=pr[i+1];
585pr[i]=ch;
586}
587void keygen(char k1[],char k2[],char key[]){
588char keytemp[11];
589permute(keytemp,key,p10,10);
590circularls(keytemp,5);
591circularls(keytemp+5,5);
592permute(k1,keytemp,p8,8);
593circularls(keytemp,5);
594circularls(keytemp,5);
595circularls(keytemp+5,5);
596circularls(keytemp+5,5);
597permute(k2,keytemp,p8,8);
598}
599void xor(char op[],char ip[]){
600int i;
601for(i=0;i<strlen(op)&&i<strlen(ip);i++)
602op[i]=(op[i]-'0')^(ip[i]-'0')+'0';
603}
604void sbox(char op[],char ip[],int s[][4]) {
605int value;
606value=s[(ip[0]-'0')*2+(ip[3]-'0')][(ip[1]-'0')*2+(ip[2]-'0')];
607op[0]=value/2+'0';
608op[1]=value%2+'0';
609op[2]='\0';
610}
611void fk(char op[],char ip[],char k[])
612{
613char l[5],r[5],tmp[9],tmp1[9],tmp2[9];
614strncpy(l,ip,4);
615l[4]='\0';
616strncpy(r,ip+4,4);
617r[4]='\0';
618permute(tmp,r,ep,8);
619xor(tmp,k);
620sbox(tmp1,tmp,s0);
621sbox(tmp2,tmp+4,s1);
622strcat(tmp1,tmp2);
623permute(tmp,tmp1,p4,4);
624xor(tmp,l);
625strcat(tmp,r);
626strcpy(op,tmp);
627}
628void sw(char pr[]) {
629char tmp[9];
630strncpy(tmp,pr+4,4);
631strncpy(tmp+4,pr,4);
632tmp[8]='\0';
633strcpy(pr,tmp);
634}
635void main()
636{
637char key[11],k1[9],k2[9],plain[9],cipher[9],tmp[9];
638clrscr();
639printf("enter 10 bit key:");
640gets(key);
641if(strlen(key)!=10) printf("invalid key length !!");
642else
643{
644keygen(k1,k2,key);
645printf("sub key k1::");
646puts(k1);
647printf("subkey k2::");
648puts(k2);
649printf("enter 8 bit plain text:");
650gets(plain);
651if(strlen(plain)!=8) printf("invalid length plain text !!");
652permute(tmp,plain,ip,8);
653fk(cipher,tmp,k1);
654sw(cipher);
655fk(tmp,cipher,k2);
656permute(cipher,tmp,ipinv,8);
657printf("cipher teaxt is::");
658puts(cipher);
659/* decryption process*/
660permute(tmp,cipher,ip,8);
661fk(plain,tmp,k2);
662sw(plain);
663fk(tmp,plain,k1);
664permute(plain,tmp,ipinv,8);
665printf("decrypted text is::");
666puts(plain);
667}
668getch();
669}
670OUTPUT:
671enter 10 bit key:2345167893
672sub key k1::27958436
673subkey k2::84613392
674enter 8 bit plain text:stmartin
675cipher teaxt is::iaσtmn≤t
676decrypted text is::stmartins
677enter 10 bit key:1456987203
678sub key k1::17062538
679subkey k2::25893401
680enter 8 bit plain text:computer
681cipher teaxt is::dpuncìcu
682decrypted text is::computer
683\\RSA:
684#include <stdio.h>
685#include <stdlib.h>
686#include <math.h>
687
688int checkPrime(int n) {
689 int i;
690 int m = n / 2;
691
692 for (i = 2; i <= m; i++) {
693 if (n % i == 0) {
694 return 0; // Not Prime
695 }
696 }
697
698 return 1; // Prime
699}
700
701int findGCD(int n1, int n2) {
702 int i, gcd;
703
704 for(i = 1; i <= n1 && i <= n2; ++i) {
705 if(n1 % i == 0 && n2 % i == 0)
706 gcd = i;
707 }
708
709 return gcd;
710}
711
712int powMod(int a, int b, int n) {
713 long long x = 1, y = a;
714
715 while (b > 0) {
716 if (b % 2 == 1)
717 x = (x * y) % n;
718 y = (y * y) % n; // Squaring the base
719 b /= 2;
720 }
721
722 return x % n;
723}
724
725int main(int argc, char* argv[]) {
726 int p, q;
727 int n, phin;
728
729 int data, cipher, decrypt;
730
731 while (1) {
732 printf("Enter any two prime numbers: ");
733 scanf("%d %d", &p, &q);
734
735 if (!(checkPrime(p) && checkPrime(q)))
736 printf("Both numbers are not prime. Please enter prime numbers only...\n");
737 else if (!checkPrime(p))
738 printf("The first prime number you entered is not prime, please try again...\n");
739 else if (!checkPrime(q))
740 printf("The second prime number you entered is not prime, please try again...\n");
741 else
742 break;
743 }
744
745 n = p * q;
746
747 phin = (p - 1) * (q - 1);
748
749 int e = 0;
750 for (e = 5; e <= 100; e++) {
751 if (findGCD(phin, e) == 1)
752 break;
753 }
754
755 int d = 0;
756 for (d = e + 1; d <= 100; d++) {
757 if ( ((d * e) % phin) == 1)
758 break;
759 }
760
761 printf("Value of e: %d\nValue of d: %d\n", e, d);
762
763 printf("Enter some numerical data: ");
764 scanf("%d", &data);
765
766 cipher = powMod(data, e, n);
767 printf("The cipher text is: %d\n", cipher);
768
769 decrypt = powMod(cipher, d, n);
770 printf("The decrypted text is: %d\n", decrypt);
771 return 0;
772}