Advertisement
franciscominajas

Practica2 nidia

Feb 11th, 2014
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6.  
  7. int validateRing(int Ring);
  8. int Cipher(int alpha, int betha);
  9. int Descipher(int alfa,int beta);
  10. int Multiplicativeinverse(int number);
  11. int Additiveinverse(int val);
  12.  
  13. int main(void)
  14. {
  15.     int choice;
  16.     int alfa=0;
  17.     int beta=0;
  18.     int val=0;
  19.     int val2=0;
  20.     do
  21.     {
  22.         system("cls");
  23.         printf("----------Practice 2-----------\n");
  24.         printf("----------Affine Cipher-----------\n");
  25.         printf("Menu\n");
  26.         printf("1. Cipher\n");
  27.         printf("2. Descipher\n");
  28.         printf("3. Exit\n");
  29.         scanf("%d", &choice);
  30.  
  31.         switch (choice)
  32.         {
  33.             case 1:
  34.                 printf("Give me alpha\t");
  35.                 scanf("%d",&alfa);
  36.                 printf("\nGive me betha\t");
  37.                 scanf("%d",&beta);
  38.                 printf("\n");
  39.                 val=validateRing(alfa);
  40.                 if(val==1)
  41.                     printf("Alfa correct\n");
  42.                 else
  43.                 {
  44.                     printf("Alfa no correct\n");
  45.                     continue;
  46.                 }
  47.                 if(beta>=0 && beta<=26)
  48.                     printf("Beta correct\n");
  49.                 else
  50.                 {
  51.                     printf("Beta no correct\n");
  52.                     continue;
  53.                 }
  54.  
  55.                 val2=Cipher(alfa,beta);
  56.                 if(val2==1)
  57.                     printf("Encryption successful\n");
  58.                 else
  59.                     printf("Encryption not successful\n");
  60.                 system("pause");
  61.                 break;
  62.             case 2:
  63.                 printf("Give me alpha\t");
  64.                 scanf("%d",&alfa);
  65.                 printf("\nGive me betha\t");
  66.                 scanf("%d",&beta);
  67.                 printf("\n");
  68.                 val=validateRing(alfa);
  69.                 if(val==1)
  70.                     printf("Alfa correct\n");
  71.                 else
  72.                 {
  73.                     printf("Alfa no correct\n");
  74.                     continue;
  75.                 }
  76.                 if(beta>=0 && beta<=26)
  77.                     printf("Beta correct\n");
  78.                 else
  79.                 {
  80.                     printf("Beta no correct\n");
  81.                     continue;
  82.                 }
  83.                 int val3=Descipher(alfa,beta);
  84.                 if(val3==1)
  85.                     printf("Successful decryption\n");
  86.                 else
  87.                     printf("Decryption is not successful\n");
  88.                 system("pause");
  89.                 break;
  90.             case 3:
  91.                 printf("Exiting!\n");
  92.                 system("PAUSE");
  93.                 exit(0);
  94.                 break;
  95.             default:
  96.                 printf("Invalid choice!\n");
  97.                 break;
  98.         }
  99.  
  100.     }while (choice != 3);
  101.     /*int alfa=0;
  102.     int beta=0;
  103.     int val=0;
  104.     int val2=0;
  105.     printf("----------Practica 2-----------\n");
  106.     printf("----------Affine Cipher-----------\n");
  107.     printf("Introduzca el valor de alpha\t");
  108.     scanf("%d",&alfa);
  109.     printf("\nIntroduzca el valor de betha\t");
  110.     scanf("%d",&beta);
  111.     printf("\n");
  112.     val=ValidarAnillo(alfa);
  113.     if(val==1)
  114.         printf("Alfa Valido\n");
  115.     else
  116.     {
  117.         printf("Alfa Invalido\n");
  118.         exit(0);
  119.     }
  120.     if(beta>=0 && beta<=26)
  121.         printf("Beta valido\n");
  122.     else
  123.     {
  124.         printf("Beta no valido\n");
  125.         exit(0);
  126.     }
  127.  
  128.     val2=Cifrar(alfa,beta);
  129.     if(val2==1)
  130.         printf("Cifrado realizado correctamente\n");
  131.     else
  132.         printf("Cifrado no realizado correctamente\n");
  133.  
  134.     int val3=Descifrar(alfa,beta);
  135.     if(val3==1)
  136.         printf("Descifrado realizado correctamente\n");
  137.     else
  138.         printf("Descifrado no realizado correctamente\n");
  139.     system("pause");*/
  140.     return 0;
  141. }
  142.  
  143. int Cipher(int alpha, int betha)
  144. {
  145.     fflush(stdin);
  146.     int lol=0;
  147.     int i=0, j=0, k=0;
  148.     int aux=0;
  149.     FILE *archivo;
  150.     char buffer[100];
  151.     char buffer2[100];
  152.     char cifrado[100];
  153.  
  154.     archivo = fopen("plaintext.txt","r");
  155.  
  156.     if (archivo == NULL)
  157.         exit(1);
  158.  
  159.     printf("\nThe contents of the test file is: \n");
  160.     while (feof(archivo) == 0)
  161.     {
  162.         fgets(buffer,100,archivo);
  163.         //printf("%s",buffer);
  164.     }
  165.     printf("String with spaces: %s", buffer);
  166.     printf("\n");
  167.     //system("PAUSE");
  168.     fclose(archivo);
  169.  
  170.     for(j=0;j<=strlen(buffer);j++)
  171.     {
  172.         if(buffer[j]!=' ')
  173.         {
  174.            buffer2[k]=buffer[j];
  175.            k++;
  176.         }
  177.     }
  178.     printf("String with no spaces: %s", buffer2);
  179.     printf("\n");
  180.  
  181.     for(i=0;i<strlen(buffer2);i++)
  182.     {
  183.         if(toascii(buffer2[i])>=97 && toascii(buffer2[i])<=122)
  184.         {
  185.             aux=1;
  186.         }
  187.         else
  188.         {
  189.             aux=0;
  190.         }
  191.     }
  192.     if(aux==0)
  193.     {
  194.         printf("\nIncorrect chain\n");
  195.         exit(0);
  196.     }
  197.     else
  198.         printf("\nAccepted chain\n");
  199.  
  200.     //zona de cifrado
  201.     //int aux=0;
  202.     for(i=0;i<strlen(buffer2);i++)
  203.     {
  204.         aux=toascii(buffer2[i])-97;
  205.         aux=(((aux*alpha)+betha) % 26);
  206.         aux=aux+65;
  207.         cifrado[i]=aux;
  208.     }
  209.     printf("Cipher: %s", cifrado);
  210.     printf("\n");
  211.  
  212.     FILE *fp;
  213.     fp = fopen ( "ciphertext.txt", "w" );
  214.     fprintf(fp, cifrado);
  215.     fclose ( fp );
  216.     lol=1;
  217.  
  218.     return lol;
  219. }
  220. int Descipher(int alfa,int beta)
  221. {
  222.     fflush(stdin);
  223.     int lol=0;
  224.     int i=0;
  225.     int aux=0;
  226.     FILE *archivo;
  227.     char buffer[100];
  228.     char cifrado[100];
  229.     char descifrado[100];
  230.     char file[100];
  231.     char file2[100];
  232.  
  233.     printf("\nIntroduce the decrypt file name:\t");
  234.     scanf("%s",&file);
  235.     strcat(file,".txt");
  236.     printf("\nFile name: %s", file);
  237.  
  238.     //ciphertext
  239.  
  240.     archivo = fopen(file,"r");
  241.  
  242.     if (archivo == NULL)
  243.         exit(1);
  244.  
  245.     printf("\nThe contents of the test file is: \n");
  246.     while (feof(archivo) == 0)
  247.     {
  248.         fgets(buffer,100,archivo);
  249.         //printf("%s",buffer);
  250.     }
  251.     printf("Encrypted string: %s", buffer);
  252.     printf("\n");
  253.     //system("PAUSE");
  254.  
  255.     for(i=0;i<strlen(buffer);i++)
  256.     {
  257.         if(toascii(buffer[i])>=65 && toascii(buffer[i])<=90)
  258.         {
  259.             aux=1;
  260.         }
  261.         else
  262.         {
  263.             aux=0;
  264.         }
  265.     }
  266.     if(aux==0)
  267.     {
  268.         printf("\nIncorrect chain\n");
  269.         exit(0);
  270.     }
  271.     else
  272.         printf("\nAccepted chain\n");
  273.  
  274.     //zona de cifrado
  275.     //int aux=0;
  276.     //printf("\nIM: %d",InversoMultiplicativo(alfa));
  277.     //printf("\nIA: %d",inversoAditivo(beta*-1));
  278.     //printf("\n");
  279.     int IM=Multiplicativeinverse(alfa);
  280.     int IA=Additiveinverse(beta*-1);
  281.     //printf("\n----------> %d\n",strlen(buffer));
  282.     for(i=0;i<strlen(buffer);i++)
  283.     {
  284.         aux=toascii(buffer[i])-65;
  285.         //printf("->%d",aux);
  286.         aux=((IM)*(aux+IA))%26;
  287.         aux=aux+97;
  288.         cifrado[i]=aux;
  289.     }
  290.     printf("Decoded: ");
  291.     for(i=0;i<strlen(buffer);i++)
  292.     {
  293.         if(i<strlen(buffer))
  294.         {
  295.             printf("%c", cifrado[i]);
  296.             descifrado[i]=cifrado[i];
  297.         }
  298.             //printf("%c", cifrado[i]);
  299.     }
  300.     printf("\n");
  301.     //printf("Descifrado: %c", cifrado[13]);
  302.  
  303.     FILE *fp;
  304.     fp = fopen ( "decrypted.txt", "w" );
  305.     fprintf(fp, descifrado);
  306.     fclose ( fp );
  307.     lol=1;
  308.  
  309.     return lol;
  310. }
  311. int Multiplicativeinverse(int number)
  312. {
  313.     int result=0;
  314.     if(number==1)
  315.         result=1;
  316.     else if(number==3)
  317.         result=9;
  318.     else if(number==5)
  319.         result=21;
  320.     else if(number==7)
  321.         result=15;
  322.     else if(number==9)
  323.         result=3;
  324.     else if(number==11)
  325.         result=19;
  326.     else if(number==15)
  327.         result=7;
  328.     else if(number==17)
  329.         result=23;
  330.     else if(number==19)
  331.         result=11;
  332.     else if(number==21)
  333.         result=5;
  334.     else if(number==23)
  335.         result=17;
  336.     else
  337.         result=25;
  338.  
  339.     return result;
  340. }
  341. int Additiveinverse(int val)
  342. {
  343.     int res=val;
  344.     while(res<0)
  345.     {
  346.        res=res+26;
  347.     }
  348.  
  349.     return res;
  350. }
  351. int validateRing(int Ring)
  352. {
  353.     int val[12]={1,9,21,15,3,19,7,23,11,5,17,25};
  354.     int i=0;
  355.     int res=0;
  356.     int cont=0;
  357.     for(i=0;i<11;i++)
  358.     {
  359.         if(val[i]==Ring)
  360.         {
  361.             cont++;
  362.         }
  363.     }
  364.     if(cont==1)
  365.         res=1;
  366.     else
  367.         res=0;
  368.     return res;
  369. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement