Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- #include <string.h>
- #include <ctype.h>
- int validateRing(int Ring);
- int Cipher(int alpha, int betha);
- int Descipher(int alfa,int beta);
- int Multiplicativeinverse(int number);
- int Additiveinverse(int val);
- int main(void)
- {
- int choice;
- int alfa=0;
- int beta=0;
- int val=0;
- int val2=0;
- do
- {
- system("cls");
- printf("----------Practice 2-----------\n");
- printf("----------Affine Cipher-----------\n");
- printf("Menu\n");
- printf("1. Cipher\n");
- printf("2. Descipher\n");
- printf("3. Exit\n");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- printf("Give me alpha\t");
- scanf("%d",&alfa);
- printf("\nGive me betha\t");
- scanf("%d",&beta);
- printf("\n");
- val=validateRing(alfa);
- if(val==1)
- printf("Alfa correct\n");
- else
- {
- printf("Alfa no correct\n");
- continue;
- }
- if(beta>=0 && beta<=26)
- printf("Beta correct\n");
- else
- {
- printf("Beta no correct\n");
- continue;
- }
- val2=Cipher(alfa,beta);
- if(val2==1)
- printf("Encryption successful\n");
- else
- printf("Encryption not successful\n");
- system("pause");
- break;
- case 2:
- printf("Give me alpha\t");
- scanf("%d",&alfa);
- printf("\nGive me betha\t");
- scanf("%d",&beta);
- printf("\n");
- val=validateRing(alfa);
- if(val==1)
- printf("Alfa correct\n");
- else
- {
- printf("Alfa no correct\n");
- continue;
- }
- if(beta>=0 && beta<=26)
- printf("Beta correct\n");
- else
- {
- printf("Beta no correct\n");
- continue;
- }
- int val3=Descipher(alfa,beta);
- if(val3==1)
- printf("Successful decryption\n");
- else
- printf("Decryption is not successful\n");
- system("pause");
- break;
- case 3:
- printf("Exiting!\n");
- system("PAUSE");
- exit(0);
- break;
- default:
- printf("Invalid choice!\n");
- break;
- }
- }while (choice != 3);
- /*int alfa=0;
- int beta=0;
- int val=0;
- int val2=0;
- printf("----------Practica 2-----------\n");
- printf("----------Affine Cipher-----------\n");
- printf("Introduzca el valor de alpha\t");
- scanf("%d",&alfa);
- printf("\nIntroduzca el valor de betha\t");
- scanf("%d",&beta);
- printf("\n");
- val=ValidarAnillo(alfa);
- if(val==1)
- printf("Alfa Valido\n");
- else
- {
- printf("Alfa Invalido\n");
- exit(0);
- }
- if(beta>=0 && beta<=26)
- printf("Beta valido\n");
- else
- {
- printf("Beta no valido\n");
- exit(0);
- }
- val2=Cifrar(alfa,beta);
- if(val2==1)
- printf("Cifrado realizado correctamente\n");
- else
- printf("Cifrado no realizado correctamente\n");
- int val3=Descifrar(alfa,beta);
- if(val3==1)
- printf("Descifrado realizado correctamente\n");
- else
- printf("Descifrado no realizado correctamente\n");
- system("pause");*/
- return 0;
- }
- int Cipher(int alpha, int betha)
- {
- fflush(stdin);
- int lol=0;
- int i=0, j=0, k=0;
- int aux=0;
- FILE *archivo;
- char buffer[100];
- char buffer2[100];
- char cifrado[100];
- archivo = fopen("plaintext.txt","r");
- if (archivo == NULL)
- exit(1);
- printf("\nThe contents of the test file is: \n");
- while (feof(archivo) == 0)
- {
- fgets(buffer,100,archivo);
- //printf("%s",buffer);
- }
- printf("String with spaces: %s", buffer);
- printf("\n");
- //system("PAUSE");
- fclose(archivo);
- for(j=0;j<=strlen(buffer);j++)
- {
- if(buffer[j]!=' ')
- {
- buffer2[k]=buffer[j];
- k++;
- }
- }
- printf("String with no spaces: %s", buffer2);
- printf("\n");
- for(i=0;i<strlen(buffer2);i++)
- {
- if(toascii(buffer2[i])>=97 && toascii(buffer2[i])<=122)
- {
- aux=1;
- }
- else
- {
- aux=0;
- }
- }
- if(aux==0)
- {
- printf("\nIncorrect chain\n");
- exit(0);
- }
- else
- printf("\nAccepted chain\n");
- //zona de cifrado
- //int aux=0;
- for(i=0;i<strlen(buffer2);i++)
- {
- aux=toascii(buffer2[i])-97;
- aux=(((aux*alpha)+betha) % 26);
- aux=aux+65;
- cifrado[i]=aux;
- }
- printf("Cipher: %s", cifrado);
- printf("\n");
- FILE *fp;
- fp = fopen ( "ciphertext.txt", "w" );
- fprintf(fp, cifrado);
- fclose ( fp );
- lol=1;
- return lol;
- }
- int Descipher(int alfa,int beta)
- {
- fflush(stdin);
- int lol=0;
- int i=0;
- int aux=0;
- FILE *archivo;
- char buffer[100];
- char cifrado[100];
- char descifrado[100];
- char file[100];
- char file2[100];
- printf("\nIntroduce the decrypt file name:\t");
- scanf("%s",&file);
- strcat(file,".txt");
- printf("\nFile name: %s", file);
- //ciphertext
- archivo = fopen(file,"r");
- if (archivo == NULL)
- exit(1);
- printf("\nThe contents of the test file is: \n");
- while (feof(archivo) == 0)
- {
- fgets(buffer,100,archivo);
- //printf("%s",buffer);
- }
- printf("Encrypted string: %s", buffer);
- printf("\n");
- //system("PAUSE");
- for(i=0;i<strlen(buffer);i++)
- {
- if(toascii(buffer[i])>=65 && toascii(buffer[i])<=90)
- {
- aux=1;
- }
- else
- {
- aux=0;
- }
- }
- if(aux==0)
- {
- printf("\nIncorrect chain\n");
- exit(0);
- }
- else
- printf("\nAccepted chain\n");
- //zona de cifrado
- //int aux=0;
- //printf("\nIM: %d",InversoMultiplicativo(alfa));
- //printf("\nIA: %d",inversoAditivo(beta*-1));
- //printf("\n");
- int IM=Multiplicativeinverse(alfa);
- int IA=Additiveinverse(beta*-1);
- //printf("\n----------> %d\n",strlen(buffer));
- for(i=0;i<strlen(buffer);i++)
- {
- aux=toascii(buffer[i])-65;
- //printf("->%d",aux);
- aux=((IM)*(aux+IA))%26;
- aux=aux+97;
- cifrado[i]=aux;
- }
- printf("Decoded: ");
- for(i=0;i<strlen(buffer);i++)
- {
- if(i<strlen(buffer))
- {
- printf("%c", cifrado[i]);
- descifrado[i]=cifrado[i];
- }
- //printf("%c", cifrado[i]);
- }
- printf("\n");
- //printf("Descifrado: %c", cifrado[13]);
- FILE *fp;
- fp = fopen ( "decrypted.txt", "w" );
- fprintf(fp, descifrado);
- fclose ( fp );
- lol=1;
- return lol;
- }
- int Multiplicativeinverse(int number)
- {
- int result=0;
- if(number==1)
- result=1;
- else if(number==3)
- result=9;
- else if(number==5)
- result=21;
- else if(number==7)
- result=15;
- else if(number==9)
- result=3;
- else if(number==11)
- result=19;
- else if(number==15)
- result=7;
- else if(number==17)
- result=23;
- else if(number==19)
- result=11;
- else if(number==21)
- result=5;
- else if(number==23)
- result=17;
- else
- result=25;
- return result;
- }
- int Additiveinverse(int val)
- {
- int res=val;
- while(res<0)
- {
- res=res+26;
- }
- return res;
- }
- int validateRing(int Ring)
- {
- int val[12]={1,9,21,15,3,19,7,23,11,5,17,25};
- int i=0;
- int res=0;
- int cont=0;
- for(i=0;i<11;i++)
- {
- if(val[i]==Ring)
- {
- cont++;
- }
- }
- if(cont==1)
- res=1;
- else
- res=0;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement