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.  


Tuesday, 31 May 2016

C code to Encrypt & Decrypt Message using Transposition Cipher



C-code-to-encrypt-and-decrypt-a-message-using-Transposition-cipher
C-code-to-encrypt-and-decrypt-a-message-using-Transposition-cipher-2

C Program

  1. #include<stdio.h>
  2. #include<string.h>
  3. void cipher(int i,int c);
  4. int findMin();
  5. void makeArray(int,int);
  6. char arr[22][22],darr[22][22],emessage[111],retmessage[111],key[55];
  7. char temp[55],temp2[55];
  8. int k=0;
  9. int main() {
  10. char *message,*dmessage;
  11. int i,j,klen,emlen,flag=0;
  12. int r,c,index,min,rows;
  13. clrscr();
  14. printf("Enetr the key\n");
  15. fflush(stdin);
  16. gets(key);
  17. printf("\nEnter message to be ciphered\n");
  18. fflush(stdin);
  19. gets(message);
  20. strcpy(temp,key);
  21. klen=strlen(key);
  22. k=0;
  23. for (i=0; ;i++) {
  24. if(flag==1)
  25. break;
  26. for (j=0;key[j]!=NULL;j++) {
  27. if(message[k]==NULL) {
  28. flag=1;
  29. arr[i][j]='-';
  30. } else {
  31. arr[i][j]=message[k++];
  32. }
  33. }
  34. }
  35. r=i;
  36. c=j;
  37. for (i=0;i<r;i++) {
  38. for (j=0;j<c;j++) {
  39. printf("%c ",arr[i][j]);
  40. }
  41. printf("\n");
  42. }
  43. k=0;
  44. for (i=0;i<klen;i++) {
  45. index=findMin();
  46. cipher(index,r);
  47. }
  48. emessage[k]='\0';
  49. printf("\nEncrypted message is\n");
  50. for (i=0;emessage[i]!=NULL;i++)
  51. printf("%c",emessage[i]);
  52. printf("\n\n");
  53. //deciphering
  54. emlen=strlen(emessage);
  55. //emlen is length of encrypted message
  56. strcpy(temp,key);
  57. rows=emlen/klen;
  58. //rows is no of row of the array to made from ciphered message
  59. rows;
  60. j=0;
  61. for (i=0,k=1;emessage[i]!=NULL;i++,k++) {
  62. //printf("\nEmlen=%d",emlen);
  63. temp2[j++]=emessage[i];
  64. if((k%rows)==0) {
  65. temp2[j]='\0';
  66. index=findMin();
  67. makeArray(index,rows);
  68. j=0;
  69. }
  70. }
  71. printf("\nArray Retrieved is\n");
  72. k=0;
  73. for (i=0;i<r;i++) {
  74. for (j=0;j<c;j++) {
  75. printf("%c ",darr[i][j]);
  76. //retrieving message
  77. retmessage[k++]=darr[i][j];
  78. }
  79. printf("\n");
  80. }
  81. retmessage[k]='\0';
  82. printf("\nMessage retrieved is\n");
  83. for (i=0;retmessage[i]!=NULL;i++)
  84. printf("%c",retmessage[i]);
  85. getch();
  86. return(0);
  87. }
  88. void cipher(int i,int r) {
  89. int j;
  90. for (j=0;j<r;j++) { {
  91. emessage[k++]=arr[j][i];
  92. }
  93. }
  94. // emessage[k]='\0';
  95. }
  96. void makeArray(int col,int row) {
  97. int i,j;
  98. for (i=0;i<row;i++) {
  99. darr[i][col]=temp2[i];
  100. }
  101. }
  102. int findMin() {
  103. int i,j,min,index;
  104. min=temp[0];
  105. index=0;
  106. for (j=0;temp[j]!=NULL;j++) {
  107. if(temp[j]<min) {
  108. min=temp[j];
  109. index=j;
  110. }
  111. }
  112. temp[index]=123;
  113. return(index);
  114. }