Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.46 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<process.h>
  4. #include<string.h>
  5.  
  6. void key1(char key[8]);
  7. void conver(char key[8]);
  8. void generate(int k4[56]);
  9. void shift1(int k4[56]);
  10. void shift2(int k4[56]);
  11. void ciphertext(int key_1[64] );
  12. void display();
  13. void round(int k_2[48],int key_1[64],int cipher[64]);
  14. void substitution(int s1[6],int s_1[4][16],int p1[4]);
  15. void decryption(char key[8]);
  16. void deconvert(int ct[64]);
  17.  
  18. int k1[8][8],k2[8][8];
  19. int k_1[56],k_2[48];
  20. int k4[56];
  21. int key_1[64];
  22. int count=1;
  23. int ct[64];
  24. int key11[48],key12[48],key13[48],key14[48],key15[48],key16[48],
  25. key17[48],key18[48],key19[48],key20[48],key21[48],key22[48],
  26. key23[48],key24[48],key25[48],key26[48];
  27.  
  28.  
  29. void main()
  30. {
  31. int ch;
  32. char ans;
  33. clrscr();
  34. do
  35. {
  36. char key[8],plain[8];
  37. int i,j,q=0;
  38.  
  39. clrscr();
  40. printf("\nMenu");
  41. printf("\n1.Encryption\n2.Decryption\n3.Exit");
  42. printf("\nEnter Choice:=");
  43. scanf("%d",&ch);
  44. switch(ch)
  45. {
  46. case 1:
  47. printf("\nEnter The Plaintex [8-char]:-");
  48. scanf("%s",&plain);
  49. printf("\n64-Bit Plaintex is:-\n");
  50. conver(plain);
  51. for(i=0;i<8;i++)
  52. {
  53. for(j=0;j<8;j++)
  54. {
  55. key_1[q]=k2[i][j];
  56. q=q+1;
  57. }
  58. }
  59. printf("\nEnter the key[8-char]:-");
  60. scanf("%s",&key);
  61.  
  62. key1(key);
  63.  
  64. ciphertext(key_1);
  65. break;
  66. case 2:
  67. printf("\nEnter the key[8-char]:-");
  68. scanf("%s",&key);
  69. decryption(key);
  70. count=1;
  71. break;
  72. case 3:
  73. exit(0);
  74. }
  75. printf("\nDo you Want To Continue:=.");
  76. flushall();
  77. scanf("%c",&ans);
  78. }while(ans=='y');
  79.  
  80. getch();
  81. }
  82.  
  83. void ciphertext(int key_1[64] )
  84. {
  85.  
  86. int rd1[64],rd2[64],rd3[64],rd4[64],rd5[64],rd6[64],rd7[64],
  87. rd8[64],rd9[64],rd10[64],rd11[64],rd12[64],rd13[64],rd14[64],
  88. rd15[64],rd16[64],i;
  89.  
  90. int sw1[32],sw2[32];
  91.  
  92. int ip_1[64]={40,8,48,16,56,24,64,32,
  93. 39,7,47,15,55,23,63,31,
  94. 38,6,46,14,54,22,62,30,
  95. 37,5,45,13,53,21,61,29,
  96. 36,4,44,12,52,20,60,28,
  97. 35,3,43,11,51,19,59,27,
  98. 34,2,42,10,50,18,58,26,
  99. 33,1,41,9,49,17,57,25};
  100.  
  101. shift1(k4);
  102. round(k_2,key_1,rd1);
  103.  
  104. shift1(k_1);
  105. round(k_2,rd1,rd2);
  106.  
  107. shift2(k_1);
  108. round(k_2,rd2,rd3);
  109.  
  110. shift2(k_1);
  111. round(k_2,rd3,rd4);
  112.  
  113. shift2(k_1);
  114. round(k_2,rd4,rd5);
  115.  
  116. shift2(k_1);
  117. round(k_2,rd5,rd6);
  118.  
  119. shift2(k_1);
  120. round(k_2,rd6,rd7);
  121.  
  122. shift2(k_1);
  123. round(k_2,rd7,rd8);
  124.  
  125. shift1(k_1);
  126. round(k_2,rd8,rd9);
  127.  
  128. shift2(k_1);
  129. round(k_2,rd9,rd10);
  130.  
  131. shift2(k_1);
  132. round(k_2,rd10,rd11);
  133.  
  134. shift2(k_1);
  135. round(k_2,rd11,rd12);
  136.  
  137. shift2(k_1);
  138. round(k_2,rd12,rd13);
  139.  
  140. shift2(k_1);
  141. round(k_2,rd13,rd14);
  142.  
  143. shift2(k_1);
  144. round(k_2,rd14,rd15);
  145.  
  146. shift1(k_1);
  147. round(k_2,rd15,rd16);
  148.  
  149. // swap
  150. for(i=0;i<32;i++)
  151. {
  152. sw1[i]=rd16[i];
  153. }
  154. for(i=32;i<64;i++)
  155. {
  156. sw2[i-32]=rd16[i];
  157. }
  158.  
  159. for(i=0;i<32;i++)
  160. {
  161. rd16[i]=sw2[i];
  162. }
  163. for(i=0;i<32;i++)
  164. {
  165. rd16[i+32]=sw1[i];
  166. }
  167.  
  168. /*Inverse Permutation*/
  169. for(i=0;i<64;i++)
  170. {
  171. ct[i]=rd16[ip_1[i]-1];
  172. }
  173.  
  174. printf("\nFinal Ciphertext is:=\n");
  175. for(i=0;i<64;i++)
  176. {
  177. if(i==8||i==16||i==24||i==32||i==40||i==48||i==56||i==64)
  178. {
  179. printf("\n");
  180. }
  181. printf("\t%d",ct[i]);
  182. }
  183.  
  184. }
  185.  
  186. void key1(char key[8])
  187. {
  188. int i;
  189. printf("\n64-Bit Key is:=\n");
  190. conver(key);
  191. generate(k4);
  192. }
  193.  
  194. void display()
  195. {
  196. int i;
  197.  
  198. for(i=0;i<48;i++)
  199. {
  200. if(i==8||i==16||i==24||i==32||i==40||i==48||i==56||i==64)
  201. {
  202. printf("\n");
  203. }
  204. printf("\t%d",k_2[i]);
  205. }
  206. }
  207.  
  208. void conver(char key[8])
  209. {
  210. int len,no[8],i,j=0;
  211.  
  212. len=strlen(key);
  213. for(i=0;i<len;i++)
  214. no[i]=key[i];
  215. for(i=0;i<8;i++)
  216. for(j=0;j<8;j++)
  217. k1[i][j]=0;
  218.  
  219. for(i=0;i<len;i++)
  220. {
  221. j=0;
  222. while(no[i]!=1)
  223. {
  224. k1[i][j]=no[i]%2;
  225. no[i]=no[i]/2;
  226. j++;
  227. }
  228. k1[i][j]=no[i];
  229. while(j!=8)
  230. {
  231. j++;
  232. }
  233. }
  234. for(i=0;i<8;i++)
  235. {
  236. for(j=7;j>=0;j--)
  237. {
  238. k2[i][7-j]=k1[i][j];
  239. }
  240. }
  241. printf("\n");
  242. for(i=0;i<8;i++)
  243. {
  244. for(j=0;j<8;j++)
  245. {
  246. printf("\t%d",k2[i][j]);
  247. }
  248. printf("\n");
  249. }
  250. }
  251.  
  252. void generate(int k4[56])
  253. {
  254. int k3[64],p=0,i,j;
  255. int pc_1[56]={57,49,41,33,25,17,9,
  256. 1,58,50,42,34,26,18,
  257. 10,2,59,51,43,35,27,
  258. 19,11,3,60,52,44,36,
  259. 63,55,47,39,31,23,15,
  260. 7,62,54,46,38,30,22,
  261. 14,6,61,53,45,37,29,
  262. 21,13,5,28,20,12,4 };
  263.  
  264. for(i=0;i<8;i++)
  265. {
  266. for(j=0;j<8;j++)
  267. {
  268. k3[p]=k2[i][j];
  269. p++;
  270. }
  271. }
  272. for(i=0;i<56;i++)
  273. {
  274. k4[i]=k3[pc_1[i]-1];
  275. }
  276. }
  277.  
  278. void shift1(int k4[56])
  279. {
  280. int i,temp;
  281. int pc_2[48]={14,17,11,24,1,5,3,28,
  282. 15,6,21,10,23,19,12,4,
  283. 26,8,16,7,27,20,13,2,
  284. 41,52,31,37,47,55,30,40,
  285. 51,45,33,48,44,49,39,56,
  286. 34,53,46,42,50,36,29,32};
  287.  
  288. for(i=0;i<28;i++)
  289. {
  290. k_1[i]=k4[i];
  291. }
  292. temp=k_1[0];
  293. for(i=0;i<28;i++)
  294. {
  295. k_1[i]=k_1[i+1];
  296. }
  297. k_1[27]=temp;
  298.  
  299. for(i=28;i<56;i++)
  300. {
  301. k_1[i]=k4[i];
  302. }
  303. temp=k_1[5];
  304.  
  305. for(i=28;i<56;i++)
  306. {
  307. k_1[i]=k_1[i+1];
  308. }
  309. k_1[55]=temp;
  310.  
  311. for(i=0;i<48;i++)
  312. {
  313. k_2[i]=k_1[pc_2[i]-1];
  314. }
  315. }
  316.  
  317. void shift2(int k4[56])
  318. {
  319. int i,temp;
  320. int pc_2[48]={14,17,11,24,1,5,3,28,
  321. 15,6,21,10,23,19,12,4,
  322. 26,8,16,7,27,20,13,2,
  323. 41,52,31,37,47,55,30,40,
  324. 51,45,33,48,44,49,39,56,
  325. 34,53,46,42,50,36,29,32};
  326.  
  327. for(i=0;i<28;i++)
  328. {
  329. k_1[i]=k4[i];
  330. }
  331. temp=k_1[0];
  332.  
  333. for(i=0;i<28;i++)
  334. {
  335. k_1[i]=k_1[i+1];
  336. }
  337. k_1[27]=temp;
  338.  
  339. temp=k_1[0];
  340.  
  341. for(i=0;i<28;i++)
  342. {
  343. k_1[i]=k_1[i+1];
  344. }
  345. k_1[27]=temp;
  346.  
  347. for(i=28;i<56;i++)
  348. {
  349. k_1[i]=k4[i];
  350. }
  351. temp=k_1[28];
  352.  
  353. for(i=28;i<56;i++)
  354. {
  355. k_1[i]=k_1[i+1];
  356. }
  357. k_1[55]=temp;
  358.  
  359. temp=k_1[28];
  360.  
  361. for(i=28;i<56;i++)
  362. {
  363. k_1[i]=k_1[i+1];
  364. }
  365. k_1[55]=temp;
  366.  
  367. for(i=0;i<48;i++)
  368. {
  369. k_2[i]=k_1[pc_2[i]-1];
  370. }
  371. }
  372.  
  373. void round(int k_2[48],int key_1[64],int cipher[64])
  374. {
  375. char key[8];
  376. int key_2[64];
  377. int i,j,key1[32],key2[32];
  378. int key2_1[48];
  379. int p1[4],p2[4],p3[4],p4[4],p5[4],p6[4],p7[4],p8[4];
  380. int p_1[32];
  381. int or[32],x1[32];
  382. int s[48],s1[6],s2[6],s3[6],s4[6],s5[6],s6[6],s7[6],s8[6];
  383. int ip[64]={58,50,42,34,26,18,10,2,
  384. 60,52,44,36,28,20,12,4,
  385. 62,54,46,38,30,22,14,6,
  386. 64,56,48,40,32,24,16,8,
  387. 57,49,41,33,25,17,9,1,
  388. 59,51,43,35,27,19,11,3,
  389. 61,53,45,37,29,21,13,5,
  390. 63,55,47,39,31,23,15,7};
  391. int ep[48]={ 32,1,2,3,4,5,
  392. 4,5,6,7,8,9,
  393. 8,9,10,11,12,13,
  394. 12,13,14,15,16,17,
  395. 16,17,18,19,20,21,
  396. 20,21,22,23,24,25,
  397. 24,25,26,27,28,29,
  398. 28,29,30,31,32,1};
  399.  
  400. int p[32]={16,7,20,21,29,12,28,17,
  401. 1,15,23,26,5,18,31,10,
  402. 2,8,24,14,32,27,3,9,
  403. 19,13,30,6,22,11,4,25};
  404.  
  405. int s_1[4][16]={14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
  406. 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
  407. 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
  408. 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13};
  409. int s_2[4][16]={15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
  410. 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
  411. 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
  412. 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9};
  413. int s_3[4][16]={10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
  414. 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
  415. 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
  416. 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12};
  417.  
  418. int s_4[4][16]={7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
  419. 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
  420. 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
  421. 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14};
  422. int s_5[4][16]={2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
  423. 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
  424. 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
  425. 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3};
  426. int s_6[4][16]={12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
  427. 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
  428. 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
  429. 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13};
  430. int s_7[4][16]={4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
  431. 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
  432. 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
  433. 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12};
  434. int s_8[4][16]={13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
  435. 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
  436. 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
  437. 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11};
  438.  
  439.  
  440. if (count==1)
  441. {
  442. for(i=0;i<64;i++)
  443. {
  444. key_2[i]=key_1[ip[i]-1];
  445. }
  446. }
  447. if(count!=1)
  448. {
  449. for(i=0;i<64;i++)
  450. {
  451. key_2[i]=key_1[i];
  452. }
  453. }
  454. count++;
  455. for(i=0;i<32;i++)
  456. {
  457. key1[i]=key_2[i];
  458. }
  459.  
  460. for(i=32;i<64;i++)
  461. {
  462. key2[i-32]=key_2[i];
  463. }
  464. for(i=0;i<48;i++)
  465. {
  466. key2_1[i]=key2[ep[i]-1];
  467. }
  468.  
  469. for(i=0;i<48;i++)
  470. {
  471. if(key2_1[i]==0&&k_2[i]==0||key2_1[i]==1&&k_2[i]==1)
  472. {
  473. s[i]=0;
  474. }
  475. else
  476. {
  477. s[i]=1;
  478. }
  479. }
  480. for(i=0;i<6;i++)
  481. {
  482. s1[i]=s[i];
  483. }
  484. for(i=6;i<12;i++)
  485. {
  486. s2[i-6]=s[i];
  487. }
  488.  
  489. for(i=12;i<18;i++)
  490. {
  491. s3[i-12]=s[i];
  492. }
  493. for(i=18;i<24;i++)
  494. {
  495. s4[i-18]=s[i];
  496. }
  497. for(i=24;i<30;i++)
  498. {
  499. s5[i-24]=s[i];
  500. }
  501.  
  502. for(i=30;i<36;i++)
  503. {
  504. s6[i-30]=s[i];
  505. }
  506. for(i=36;i<42;i++)
  507. {
  508. s7[i-36]=s[i];
  509. }
  510. for(i=42;i<48;i++)
  511. {
  512. s8[i-42]=s[i];
  513. }
  514. substitution(s1,s_1,p1);
  515. substitution(s2,s_2,p2);
  516. substitution(s3,s_3,p3);
  517. substitution(s4,s_4,p4);
  518. substitution(s5,s_5,p5);
  519. substitution(s6,s_6,p6);
  520. substitution(s7,s_7,p7);
  521. substitution(s8,s_8,p8);
  522. j=0;
  523. for(i=0;i<4;i++)
  524. {
  525. p_1[j]=p1[i];
  526. j++;
  527. }
  528. for(i=0;i<4;i++)
  529. {
  530. p_1[j]=p2[i];
  531. j++;
  532. }
  533. for(i=0;i<4;i++)
  534. {
  535. p_1[j]=p3[i];
  536. j++;
  537. }
  538. for(i=0;i<4;i++)
  539. {
  540. p_1[j]=p4[i];
  541. j++;
  542. }
  543. for(i=0;i<4;i++)
  544. {
  545. p_1[j]=p5[i];
  546. j++;
  547. }
  548. for(i=0;i<4;i++)
  549. {
  550. p_1[j]=p6[i];
  551. j++;
  552. }
  553. for(i=0;i<4;i++)
  554. {
  555. p_1[j]=p7[i];
  556. j++;
  557. }
  558. for(i=0;i<4;i++)
  559. {
  560. p_1[j]=p8[i];
  561. j++;
  562. }
  563.  
  564. for(i=0;i<32;i++)
  565. {
  566. or[i]=p_1[p[i]-1];
  567. }
  568.  
  569. for(i=0;i<32;i++)
  570. {
  571. if(or[i]==0&&key1[i]==0||or[i]==1&&key1[i]==1)
  572. {
  573. x1[i]=0;
  574. }
  575. else
  576. {
  577. x1[i]=1;
  578. }
  579. }
  580.  
  581. for(i=0;i<32;i++)
  582. {
  583. cipher[i]=key2[i];
  584. }
  585. for(i=0;i<32;i++)
  586. {
  587. cipher[i+32]=x1[i];
  588. }
  589. }
  590.  
  591. void substitution(int s1[6],int s_1[4][16],int p1[4])
  592. {
  593. int r,c,t1;
  594.  
  595. if(s1[0]==0&&s1[5]==0)
  596. {
  597. r=0;
  598. }
  599. if(s1[0]==0&&s1[5]==1)
  600. {
  601. r=1 ;
  602. }
  603. if(s1[0]==1&&s1[5]==0)
  604. {
  605. r=2;
  606. }
  607. if(s1[0]==1&&s1[5]==1)
  608. {
  609. r=3 ;
  610. }
  611.  
  612. if(s1[1]==0&&s1[2]==0&&s1[3]==0&&s1[4]==0)
  613. {
  614. c=0;
  615. }
  616. if(s1[1]==0&&s1[2]==0&&s1[3]==0&&s1[4]==1)
  617. {
  618. c=1;
  619. }
  620. if(s1[1]==0&&s1[2]==0&&s1[3]==1&&s1[4]==0)
  621. {
  622. c=2;
  623. }
  624. if(s1[1]==0&&s1[2]==0&&s1[3]==1&&s1[4]==1)
  625. {
  626. c=3;
  627. }
  628. if(s1[1]==0&&s1[2]==1&&s1[3]==0&&s1[4]==0)
  629. {
  630. c=4;
  631. }
  632. if(s1[1]==0&&s1[2]==1&&s1[3]==0&&s1[4]==1)
  633. {
  634. c=5;
  635. }
  636. if(s1[1]==0&&s1[2]==1&&s1[3]==1&&s1[4]==0)
  637. {
  638. c=6;
  639. }
  640. if(s1[1]==0&&s1[2]==1&&s1[3]==1&&s1[4]==1)
  641. {
  642. c=7;
  643. }
  644. if(s1[1]==1&&s1[2]==0&&s1[3]==0&&s1[4]==0)
  645. {
  646. c=8;
  647. }
  648. if(s1[1]==1&&s1[2]==0&&s1[3]==0&&s1[4]==1)
  649. {
  650. c=9;
  651. }
  652. if(s1[1]==1&&s1[2]==0&&s1[3]==1&&s1[4]==0)
  653. {
  654. c=10;
  655. }
  656. if(s1[1]==1&&s1[2]==0&&s1[3]==1&&s1[4]==1)
  657. {
  658. c=11;
  659. }
  660. if(s1[1]==1&&s1[2]==1&&s1[3]==0&&s1[4]==0)
  661. {
  662. c=12;
  663. }
  664. if(s1[1]==1&&s1[2]==1&&s1[3]==0&&s1[4]==1)
  665. {
  666. c=13;
  667. }
  668. if(s1[1]==1&&s1[2]==1&&s1[3]==1&&s1[4]==0)
  669. {
  670. c=14;
  671. }
  672. if(s1[1]==1&&s1[2]==1&&s1[3]==1&&s1[4]==1)
  673. {
  674. c=15;
  675. }
  676.  
  677. t1=s_1[r][c];
  678.  
  679. if(t1==0)
  680. {
  681. p1[0]=0;
  682. p1[1]=0;
  683. p1[2]=0;
  684. p1[3]=0;
  685. }
  686.  
  687. if(t1==1)
  688. {
  689. p1[0]=0;
  690. p1[1]=0;
  691. p1[2]=0;
  692. p1[3]=1;
  693. }
  694. if(t1==2)
  695. {
  696. p1[0]=0;
  697. p1[1]=0;
  698. p1[2]=1;
  699. p1[3]=0;
  700. }
  701. if(t1==3)
  702. {
  703. p1[0]=0;
  704. p1[1]=0;
  705. p1[2]=1;
  706. p1[3]=1;
  707. }
  708. if(t1==4)
  709. {
  710. p1[0]=0;
  711. p1[1]=1;
  712. p1[2]=0;
  713. p1[3]=0;
  714. }
  715. if(t1==5)
  716. {
  717. p1[0]=0;
  718. p1[1]=1;
  719. p1[2]=0;
  720. p1[3]=1;
  721. }
  722. if(t1==6)
  723. {
  724. p1[0]=0;
  725. p1[1]=1;
  726. p1[2]=1;
  727. p1[3]=0;
  728. }
  729. if(t1==7)
  730. {
  731. p1[0]=0;
  732. p1[1]=1;
  733. p1[2]=1;
  734. p1[3]=1;
  735. }
  736. if(t1==8)
  737. {
  738. p1[0]=1;
  739. p1[1]=0;
  740. p1[2]=0;
  741. p1[3]=0;
  742. }
  743. if(t1==9)
  744. {
  745. p1[0]=1;
  746. p1[1]=0;
  747. p1[2]=0;
  748. p1[3]=1;
  749. }
  750. if(t1==10)
  751. {
  752. p1[0]=1;
  753. p1[1]=0;
  754. p1[2]=1;
  755. p1[3]=0;
  756. }
  757. if(t1==11)
  758. {
  759. p1[0]=1;
  760. p1[1]=0;
  761. p1[2]=1;
  762. p1[3]=1;
  763. }
  764.  
  765. if(t1==12)
  766. {
  767. p1[0]=1;
  768. p1[1]=1;
  769. p1[2]=0;
  770. p1[3]=0;
  771. }
  772. if(t1==13)
  773. {
  774. p1[0]=1;
  775. p1[1]=1;
  776. p1[2]=0;
  777. p1[3]=1;
  778. }
  779. if(t1==14)
  780. {
  781. p1[0]=1;
  782. p1[1]=1;
  783. p1[2]=1;
  784. p1[3]=0;
  785. }
  786. if(t1==15)
  787. {
  788. p1[0]=1;
  789. p1[1]=1;
  790. p1[2]=1;
  791. p1[3]=1;
  792. }
  793. }
  794.  
  795. void decryption(char key[8])
  796. {
  797.  
  798. int rd1[64],rd2[64],rd3[64],rd4[64],rd5[64],rd6[64],rd7[64],
  799. rd8[64],rd9[64],rd10[64],rd11[64],rd12[64],rd13[64],rd14[64],
  800. rd15[64],rd16[64],i;
  801.  
  802. int sw1[32],sw2[32];
  803.  
  804. int ip_1[64]={40,8,48,16,56,24,64,32,
  805. 39,7,47,15,55,23,63,31,
  806. 38,6,46,14,54,22,62,30,
  807. 37,5,45,13,53,21,61,29,
  808. 36,4,44,12,52,20,60,28,
  809. 35,3,43,11,51,19,59,27,
  810. 34,2,42,10,50,18,58,26,
  811. 33,1,41,9,49,17,57,25};
  812.  
  813. key1(key);
  814.  
  815. shift1(k4);
  816. for(i=0;i<48;i++)
  817. {
  818. key11[i]=k_2[i];
  819. }
  820.  
  821. shift1(k_1);
  822. for(i=0;i<48;i++)
  823. {
  824. key12[i]=k_2[i];
  825. }
  826.  
  827. shift2(k_1);
  828. for(i=0;i<48;i++)
  829. {
  830. key13[i]=k_2[i];
  831. }
  832.  
  833. shift2(k_1);
  834. for(i=0;i<48;i++)
  835. {
  836. key14[i]=k_2[i];
  837. }
  838.  
  839. shift2(k_1);
  840. for(i=0;i<48;i++)
  841. {
  842. key15[i]=k_2[i];
  843. }
  844.  
  845. shift2(k_1);
  846. for(i=0;i<48;i++)
  847. {
  848. key16[i]=k_2[i];
  849. }
  850.  
  851. shift2(k_1);
  852. for(i=0;i<48;i++)
  853. {
  854. key17[i]=k_2[i];
  855. }
  856.  
  857. shift2(k_1);
  858. for(i=0;i<48;i++)
  859. {
  860. key18[i]=k_2[i];
  861. }
  862.  
  863. shift1(k_1);
  864. for(i=0;i<48;i++)
  865. {
  866. key19[i]=k_2[i];
  867. }
  868.  
  869. shift2(k_1);
  870. for(i=0;i<48;i++)
  871. {
  872. key20[i]=k_2[i];
  873. }
  874.  
  875. shift2(k_1);
  876. for(i=0;i<48;i++)
  877. {
  878. key21[i]=k_2[i];
  879. }
  880.  
  881. shift2(k_1);
  882. for(i=0;i<48;i++)
  883. {
  884. key22[i]=k_2[i];
  885. }
  886.  
  887. shift2(k_1);
  888. for(i=0;i<48;i++)
  889. {
  890. key23[i]=k_2[i];
  891. }
  892.  
  893. shift2(k_1);
  894. for(i=0;i<48;i++)
  895. {
  896. key24[i]=k_2[i];
  897. }
  898.  
  899. shift2(k_1);
  900. for(i=0;i<48;i++)
  901. {
  902. key25[i]=k_2[i];
  903. }
  904.  
  905. shift1(k_1);
  906. for(i=0;i<48;i++)
  907. {
  908. key26[i]=k_2[i];
  909. }
  910.  
  911. count=1;
  912. round(key26,ct,rd1);
  913. printf("\n\n");
  914.  
  915. round(key25,rd1,rd2);
  916.  
  917. round(key24,rd2,rd3);
  918.  
  919. round(key23,rd3,rd4);
  920.  
  921. round(key22,rd4,rd5);
  922.  
  923. round(key21,rd5,rd6);
  924.  
  925. round(key20,rd6,rd7);
  926.  
  927. round(key19,rd7,rd8);
  928.  
  929. round(key18,rd8,rd9);
  930.  
  931. round(key17,rd9,rd10);
  932.  
  933. round(key16,rd10,rd11);
  934.  
  935. round(key15,rd11,rd12);
  936.  
  937. round(key14,rd12,rd13);
  938.  
  939. round(key13,rd13,rd14);
  940.  
  941. round(key12,rd14,rd15);
  942.  
  943. round(key11,rd15,rd16);
  944.  
  945. for(i=0;i<32;i++) //swap
  946. {
  947. sw1[i]=rd16[i];
  948. }
  949. for(i=32;i<64;i++)
  950. {
  951. sw2[i-32]=rd16[i];
  952. }
  953.  
  954. for(i=0;i<32;i++)
  955. {
  956. rd16[i]=sw2[i];
  957. }
  958. for(i=0;i<32;i++)
  959. {
  960. rd16[i+32]=sw1[i];
  961. }
  962.  
  963. /*Inverse Permutation*/
  964. for(i=0;i<64;i++)
  965. {
  966. ct[i]=rd16[ip_1[i]-1];
  967. }
  968.  
  969. printf("\nOriginal Plaintext is:=\n");
  970. for(i=0;i<64;i++)
  971. {
  972. if(i==8||i==16||i==24||i==32||i==40||i==48||i==56||i==64)
  973. {
  974. printf("\n");
  975. }
  976. printf("\t%d",ct[i]);
  977. }
  978. deconvert(ct);
  979. }
  980.  
  981. void deconvert(int ct[64])
  982. {
  983. int j,s,q,i;
  984.  
  985. j=1,q=0,s=0;
  986. for(i=7;i>=0;i--)
  987. {
  988. s=ct[i];
  989. s=s*j;
  990. q=q+s;
  991. j=2*j;
  992. }
  993. printf("\n\n");
  994. printf("%c",q);
  995.  
  996. j=1,q=0,s=0;
  997. for(i=15;i>=7;i--)
  998. {
  999. s=ct[i];
  1000. s=s*j;
  1001. q=q+s;
  1002. j=2*j;
  1003. }
  1004. printf("%c",q);
  1005.  
  1006. j=1,q=0,s=0;
  1007. for(i=23;i>=15;i--)
  1008. {
  1009. s=ct[i];
  1010. s=s*j;
  1011. q=q+s;
  1012. j=2*j;
  1013. }
  1014. printf("%c",q);
  1015.  
  1016. j=1,q=0,s=0;
  1017. for(i=31;i>=23;i--)
  1018. {
  1019. s=ct[i];
  1020. s=s*j;
  1021. q=q+s;
  1022. j=2*j;
  1023. }
  1024. printf("%c",q);
  1025.  
  1026. j=1,q=0,s=0;
  1027. for(i=39;i>=31;i--)
  1028. {
  1029. s=ct[i];
  1030. s=s*j;
  1031. q=q+s;
  1032. j=2*j;
  1033. }
  1034. printf("%c",q);
  1035.  
  1036. j=1,q=0,s=0;
  1037. for(i=47;i>=39;i--)
  1038. {
  1039. s=ct[i];
  1040. s=s*j;
  1041. q=q+s;
  1042. j=2*j;
  1043. }
  1044. printf("%c",q);
  1045.  
  1046. j=1,q=0,s=0;
  1047. for(i=55;i>=47;i--)
  1048. {
  1049. s=ct[i];
  1050. s=s*j;
  1051. q=q+s;
  1052. j=2*j;
  1053. }
  1054. printf("%c",q);
  1055.  
  1056. j=1,q=0,s=0;
  1057. for(i=63;i>=55;i--)
  1058. {
  1059. s=ct[i];
  1060. s=s*j;
  1061. q=q+s;
  1062. j=2*j;
  1063. }
  1064. printf("%c",q);
  1065.  
  1066. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement