Thursday 2 June 2016

C code to implement RSA Algorithm(Encryption and Decryption)

RSA Program Input

ENTER FIRST PRIME NUMBER
7

ENTER ANOTHER PRIME NUMBER
17

ENTER MESSAGE
hello
C-code-to-implement-RSA-Algorithm-2

C Program

  1. #include<stdio.h>
  2.  
  3. #include<conio.h>
  4.  
  5. #include<stdlib.h>
  6.  
  7. #include<math.h>
  8.  
  9. #include<string.h>
  10.  
  11. long int p,q,n,t,flag,e[100],d[100],temp[100],j,m[100],en[100],i;
  12.  
  13. char msg[100];
  14.  
  15. int prime(long int);
  16.  
  17. void ce();
  18.  
  19. long int cd(long int);
  20.  
  21. void encrypt();
  22.  
  23. void decrypt();
  24.  
  25. void main() {
  26.  
  27. clrscr();
  28.  
  29. printf("\nENTER FIRST PRIME NUMBER\n");
  30.  
  31. scanf("%d",&p);
  32.  
  33. flag=prime(p);
  34.  
  35. if(flag==0) {
  36.  
  37. printf("\nWRONG INPUT\n");
  38.  
  39. getch();
  40.  
  41. exit(1);
  42.  
  43. }
  44.  
  45. printf("\nENTER ANOTHER PRIME NUMBER\n");
  46.  
  47. scanf("%d",&q);
  48.  
  49. flag=prime(q);
  50.  
  51. if(flag==0||p==q) {
  52.  
  53. printf("\nWRONG INPUT\n");
  54.  
  55. getch();
  56.  
  57. exit(1);
  58.  
  59. }
  60.  
  61. printf("\nENTER MESSAGE\n");
  62.  
  63. fflush(stdin);
  64.  
  65. scanf("%s",msg);
  66.  
  67. for (i=0;msg[i]!=NULL;i++)
  68.  
  69. m[i]=msg[i];
  70.  
  71. n=p*q;
  72.  
  73. t=(p-1)*(q-1);
  74.  
  75. ce();
  76.  
  77. printf("\nPOSSIBLE VALUES OF e AND d ARE\n");
  78.  
  79. for (i=0;i<j-1;i++)
  80.  
  81. printf("\n%ld\t%ld",e[i],d[i]);
  82.  
  83. encrypt();
  84.  
  85. decrypt();
  86.  
  87. getch();
  88.  
  89. }
  90.  
  91. int prime(long int pr) {
  92.  
  93. int i;
  94.  
  95. j=sqrt(pr);
  96.  
  97. for (i=2;i<=j;i++) {
  98.  
  99. if(pr%i==0)
  100.  
  101. return 0;
  102.  
  103. }
  104.  
  105. return 1;
  106.  
  107. }
  108.  
  109. void ce() {
  110.  
  111. int k;
  112.  
  113. k=0;
  114.  
  115. for (i=2;i<t;i++) {
  116.  
  117. if(t%i==0)
  118.  
  119. continue;
  120.  
  121. flag=prime(i);
  122.  
  123. if(flag==1&&i!=p&&i!=q) {
  124.  
  125. e[k]=i;
  126.  
  127. flag=cd(e[k]);
  128.  
  129. if(flag>0) {
  130.  
  131. d[k]=flag;
  132.  
  133. k++;
  134.  
  135. }
  136.  
  137. if(k==99)
  138.  
  139. break;
  140.  
  141. }
  142.  
  143. }
  144.  
  145. }
  146.  
  147. long int cd(long int x) {
  148.  
  149. long int k=1;
  150.  
  151. while(1) {
  152.  
  153. k=k+t;
  154.  
  155. if(k%x==0)
  156.  
  157. return(k/x);
  158.  
  159. }
  160.  
  161. }
  162.  
  163. void encrypt() {
  164.  
  165. long int pt,ct,key=e[0],k,len;
  166.  
  167. i=0;
  168.  
  169. len=strlen(msg);
  170.  
  171. while(i!=len) {
  172.  
  173. pt=m[i];
  174.  
  175. pt=pt-96;
  176.  
  177. k=1;
  178.  
  179. for (j=0;j<key;j++) {
  180.  
  181. k=k*pt;
  182.  
  183. k=k%n;
  184.  
  185. }
  186.  
  187. temp[i]=k;
  188.  
  189. ct=k+96;
  190.  
  191. en[i]=ct;
  192.  
  193. i++;
  194.  
  195. }
  196.  
  197. en[i]=-1;
  198.  
  199. printf("\nTHE ENCRYPTED MESSAGE IS\n");
  200.  
  201. for (i=0;en[i]!=-1;i++)
  202.  
  203. printf("%c",en[i]);
  204.  
  205. }
  206.  
  207. void decrypt() {
  208.  
  209. long int pt,ct,key=d[0],k;
  210.  
  211. i=0;
  212.  
  213. while(en[i]!=-1) {
  214.  
  215. ct=temp[i];
  216.  
  217. k=1;
  218.  
  219. for (j=0;j<key;j++) {
  220.  
  221. k=k*ct;
  222.  
  223. k=k%n;
  224.  
  225. }
  226.  
  227. pt=k+96;
  228.  
  229. m[i]=pt;
  230.  
  231. i++;
  232.  
  233. }
  234.  
  235. m[i]=-1;
  236.  
  237. printf("\nTHE DECRYPTED MESSAGE IS\n");
  238.  
  239. for (i=0;m[i]!=-1;i++)
  240.  
  241. printf("%c",m[i]);
  242.  
  243. }
  244.