Skip to content

Instantly share code, notes, and snippets.

@Wilker
Created September 27, 2016 00:43
Show Gist options
  • Save Wilker/653319d43235e95f3118dded6bad59ca to your computer and use it in GitHub Desktop.
Save Wilker/653319d43235e95f3118dded6bad59ca to your computer and use it in GitHub Desktop.
tete
#include <stdio.h>
#include <string.h>
#define encrypt E
#define Decrypt D
int getAlphabetSequence(char character);
char* getEncryptedText(char* originalString, int key, char type);
char replace(char c, int* key, char tipo);
int mod(int a, int b);
int main(int argc, char** argv){
printf("SegInfoTrab1\n");
// printf("%s", getEncryptedText("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.#", 10, 'E'));
// printf("%s", getEncryptedText("THREE RINGS FOR THE ELVEN-KINGS UNDER THE SKY, SEVEN FOR THE DWARF-LORDS IN THEIR HALLS OF STONE, NINE FOR MORTAL MEN DOOMED TO DIE, ONE FOR THE DARK LORD ON HIS DARK THRONE. ONE RING TO RULE THEM ALL. ONE RING TO FIND THEM, ONE RING TO BRING THEM ALL AND IN THE DARKNESS BIND THEM.#",100,'E'));
printf("\n");
//printf("%s", getEncryptedText("PTXIR WKAUB QQK XJQ HWDQQ-EHUID JMPGA DVO RBR, DTESU HYA DVO CYBUD-NEMLM PK BRGRS BWEJA XM MAWSC, OYCW UYA WVURQS MRS BODFDG DC UUL, HOU QQK XJQ GKMS MCID SK PGX GKMS UDRGMQ. RII EAGG AW WWKO SZWB RUP. IQY KMEC SG EMEZ PTKD, JSC SCKO QC SBUUI EXST BOD WGD ME PTK UMQAEAPF UWYN RXST.#",100,'D'));
//printf("%s", getEncryptedText("DVO PJHJB UFIZQ ZIA NMRMC BKEW VFI YMYW YIJ.#", 10, 'D'));
printf("\n");
printf("Digite D para decriptar e E para encriptar ");
char func = ' ';
scanf("%c", &func);
printf("FUNCAO SELCIONADA %c \n",func);
printf("Insira o valor da semente ");
int semente = 0;
scanf("%d",&semente);
printf("Semente %d\n",semente);
char texto = NULL ;
printf("Digite o texto:");
while(texto != '#'){
scanf("%c", &texto);
printf("%s", getEncryptedText(texto, semente, func));
}
printf("SegInfoTrab1\n");
}
int getAlphabetSequence(char character){
return (int)character - 64;
}
char getAsciiFromAlphabetSequence(int sequence){
if (sequence == 0) return getAsciiFromAlphabetSequence(sequence + 26);
return sequence + 64;
}
char* getEncryptedText(char* originalString, int key, char type){
/*
Primeiro verificamos se a string original não é nula.
*/
int stringSize = strlen(originalString);
if (stringSize > 0) {
//Alocando memória para a nova string encriptada.
char* newString = (char*) malloc(stringSize);
for (int i = 0; i < stringSize; i++){
//Verificamos se o caractere é diferente de '#'
if (originalString[i] != 35){
//Verificamos se o caractere está no intervalo de letras maiúsculas ]64,91[
if ((originalString[i] > 64) && (originalString[i] < 91)){
//Encriptamos o caracter
newString[i] = replace(originalString[i], &key, type);
}
else{
newString[i] = originalString[i];
}
}
else{
newString[i] = '\0';
return newString;
}
}
}
else{
return 0;
}
}
char replace(char c, int* key, char type){
int oldChar = getAlphabetSequence(c);
char newChar = NULL;
if ((type == 'e') | (type == 'E')){
newChar = mod((oldChar + *key), 26);
//printf("Entrou no encrypt\n");
//printf("oldChar %d, key %d \n Letra %d, newChar %d \n" ,oldChar,*key, oldChar - *key, newChar);
*key = *key + newChar;
}
else if ((type == 'd') | (type == 'D')){
newChar = mod((oldChar - *key ), 26);
//printf("Entrou no decrypt\n");
//printf("oldChar %d, key %d \n Letra %d, newChar %d \n ",oldChar,*key, oldChar - *key, newChar);
*key = *key + oldChar;
}
return getAsciiFromAlphabetSequence(newChar);
}
int mod(int a, int b)
{
if (b < 0)
return mod(a, -b);
int ret = a % b;
if (ret < 0)
ret += b;
return ret;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment