Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. # include <stdio.h>
  2. # include <fstream>
  3. # include <string.h>
  4. # include <iostream>
  5. # include <stdlib.h>
  6. using namespace std;
  7.  
  8. int key[64]=
  9. {
  10. 0,0,0,1,0,0,1,1,
  11. 0,0,1,1,0,1,0,0,
  12. 0,1,0,1,0,1,1,1,
  13. 0,1,1,1,1,0,0,1,
  14. 1,0,0,1,1,0,1,1,
  15. 1,0,1,1,1,1,0,0,
  16. 1,1,0,1,1,1,1,1,
  17. 1,1,1,1,0,0,0,1
  18. };
  19. class Des
  20. {
  21. public:
  22. int keyi[16][48],
  23. total[64],
  24. left[32],
  25. right[32],
  26. ck[28],
  27. dk[28],
  28. expansion[48],
  29. z[48],
  30. xor1[48],
  31. sub[32],
  32. p[32],
  33. xor2[32],
  34. temp[64],
  35. pc1[56],
  36. ip[64],
  37. inv[8][8];
  38.  
  39. char final[1000];
  40. void IP();
  41. void PermChoice1();
  42. void PermChoice2();
  43. void Expansion();
  44. void inverse();
  45. void xor_two();
  46. void xor_oneE(int);
  47. void xor_oneD(int);
  48. void substitution();
  49. void permutation();
  50. void keygen();
  51. char * Encrypt(char *);
  52. char * Decrypt(char *);
  53. };
  54. void Des::IP() //Initial Permutation
  55. {
  56. int k=58,i;
  57. for(i=0; i<32; i++)
  58. {
  59. ip[i]=total[k-1];
  60. if(k-8>0) k=k-8;
  61. else k=k+58;
  62. }
  63. k=57;
  64. for( i=32; i<64; i++)
  65. {
  66. ip[i]=total[k-1];
  67. if(k-8>0) k=k-8;
  68. else k=k+58;
  69. }
  70. }
  71. void Des::PermChoice1() //Permutation Choice-1
  72. {
  73. int k=57,i;
  74. for(i=0; i<28; i++)
  75. {
  76. pc1[i]=key[k-1];
  77. if(k-8>0) k=k-8;
  78. else k=k+57;
  79. }
  80. k=63;
  81. for( i=28; i<52; i++)
  82. {
  83. pc1[i]=key[k-1];
  84. if(k-8>0) k=k-8;
  85. else k=k+55;
  86. }
  87. k=28;
  88. for(i=52; i<56; i++)
  89. {
  90. pc1[i]=key[k-1];
  91. k=k-8;
  92. }
  93.  
  94. }
  95. void Des::Expansion() //Expansion Function applied on `right' half
  96. {
  97. int exp[8][6],i,j,k;
  98. for( i=0; i<8; i++)
  99. {
  100. for( j=0; j<6; j++)
  101. {
  102. if((j!=0)||(j!=5))
  103. {
  104. k=4*i+j;
  105. exp[i][j]=right[k-1];
  106. }
  107. if(j==0)
  108. {
  109. k=4*i;
  110. exp[i][j]=right[k-1];
  111. }
  112. if(j==5)
  113. {
  114. k=4*i+j;
  115. exp[i][j]=right[k-1];
  116. }
  117. }
  118. }
  119. exp[0][0]=right[31];
  120. exp[7][5]=right[0];
  121.  
  122. k=0;
  123. for(i=0; i<8; i++)
  124. for(j=0; j<6; j++)
  125. expansion[k++]=exp[i][j];
  126. }
  127. void Des::PermChoice2()
  128. {
  129. int per[56],i,k;
  130. for(i=0; i<28; i++) per[i]=ck[i];
  131. for(k=0,i=28; i<56; i++) per[i]=dk[k++];
  132.  
  133. z[0]=per[13];
  134. z[1]=per[16];
  135. z[2]=per[10];
  136. z[3]=per[23];
  137. z[4]=per[0];
  138. z[5]=per[4];
  139. z[6]=per[2];
  140. z[7]=per[27];
  141. z[8]=per[14];
  142. z[9]=per[5];
  143. z[10]=per[20];
  144. z[11]=per[9];
  145. z[12]=per[22];
  146. z[13]=per[18];
  147. z[14]=per[11];
  148. z[15]=per[3];
  149. z[16]=per[25];
  150. z[17]=per[7];
  151. z[18]=per[15];
  152. z[19]=per[6];
  153. z[20]=per[26];
  154. z[21]=per[19];
  155. z[22]=per[12];
  156. z[23]=per[1];
  157. z[24]=per[40];
  158. z[25]=per[51];
  159. z[26]=per[30];
  160. z[27]=per[36];
  161. z[28]=per[46];
  162. z[29]=per[54];
  163. z[30]=per[29];
  164. z[31]=per[39];
  165. z[32]=per[50];
  166. z[33]=per[46];
  167. z[34]=per[32];
  168. z[35]=per[47];
  169. z[36]=per[43];
  170. z[37]=per[48];
  171. z[38]=per[38];
  172. z[39]=per[55];
  173. z[40]=per[33];
  174. z[41]=per[52];
  175. z[42]=per[45];
  176. z[43]=per[41];
  177. z[44]=per[49];
  178. z[45]=per[35];
  179. z[46]=per[28];
  180. z[47]=per[31];
  181. }
  182. void Des::xor_oneE(int round) //for Encrypt
  183. {
  184. int i;
  185. for(i=0; i<48; i++)
  186. xor1[i]=expansion[i]^keyi[round-1][i];
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement