From 9dd164cc378a43ba76d860893b9248de99ccf10b Mon Sep 17 00:00:00 2001 From: Marcela Ribeiro de Oliveira <mro15@inf.ufpr.br> Date: Wed, 9 May 2018 17:28:20 -0300 Subject: [PATCH] primeiros dois filtros --- Makefile | 10 ++++----- cypher.cpp | 1 - include/playunfair.h | 2 +- key.txt | 2 +- playunfair.cpp | 49 +++++++++++++++++++++++++++++++++----------- 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 2dfe385..7fd62d1 100644 --- a/Makefile +++ b/Makefile @@ -11,17 +11,17 @@ EXEC = playunfair cypher all: $(EXEC) -playunfair: $(OBJ) - $(CC) $(CFLAGS) -o $@ $^ $@.o +playunfair: $(OBJ) playunfair.o + $(CC) $(CFLAGS) -o $@ $^ -cypher: $(OBJ) - $(CC) $(CFLAGS) -o $@ $^ $@.o +cypher: $(OBJ) cypher.o + $(CC) $(CFLAGS) -o $@ $^ %.o: %.cpp $(DEPS) $(CC) $(CFLAGS) -c -o $@ $< $(INCL) clean: - rm -f $(OBJ) $(EXEC) + rm -f *.o $(OBJ) $(EXEC) diff --git a/cypher.cpp b/cypher.cpp index e4eb5e0..0cc77ce 100644 --- a/cypher.cpp +++ b/cypher.cpp @@ -24,7 +24,6 @@ int main(int argc, char *argv[]){ while(std::getline(input, aux)) text << aux; - //TODO: tirar caracteres especiais crip = text.str(); parser(crip); //std::cout << crip << std::endl; diff --git a/include/playunfair.h b/include/playunfair.h index 3b025ac..1365890 100644 --- a/include/playunfair.h +++ b/include/playunfair.h @@ -2,5 +2,5 @@ #define ACCEPTED 1 #define REJECTED 0 -int filter(std::string text, const std::string key); +int filter(std::string text); void parser(std::string &text); diff --git a/key.txt b/key.txt index fbcdd3e..c67fb1b 100644 --- a/key.txt +++ b/key.txt @@ -1 +1 @@ -cachorro +casa diff --git a/playunfair.cpp b/playunfair.cpp index efba99a..36751f0 100644 --- a/playunfair.cpp +++ b/playunfair.cpp @@ -9,7 +9,7 @@ int main(int argc, char *argv[]){ } std::fstream input, output, dict; char *inputName, *outputName, *dictName; - std::string aux="", key, crip; //a key vai vir do dicionario futuramente + std::string aux="", key, crip; std::ostringstream text, keys; inputName = argv[1]; @@ -25,11 +25,8 @@ int main(int argc, char *argv[]){ while(std::getline(input, aux)) text << aux; - //TODO: tirar caracteres especiais - std::cout<<text.str()[2] << std::endl; crip = text.str(); parser(crip); - //std::cout << crip << std::endl; dict.open(dictName, std::ifstream::in); if(!dict.good()){ @@ -37,20 +34,19 @@ int main(int argc, char *argv[]){ return 0; } - //TODO: if filter returns accepted print key and text in file while(std::getline(dict, aux)){ keys << aux; key = keys.str(); crip = playfair(crip, key, DECRYPT); - std::cout << crip << std::endl; - std::cout << key << std::endl; + if(filter(crip)==ACCEPTED){ + std::cout << crip << std::endl; + std::cout << key << std::endl; + } keys.str(""); keys.clear(); - filter(crip, key); //chamar filtro para cada key } - //crip = playfair(crip, key, DECRYPT); - //std::cout << crip << std::endl; + std::cout << crip << std::endl; return 0; } @@ -59,7 +55,7 @@ void parser(std::string &text){ std::transform(text.begin(), text.end(), text.begin(), ::tolower); } -int filter(std::string text, const std::string key){ +int filter(std::string text){ //TODO: if ( 4 primeiras letras sem vogal || // 3 char -('o') iguais seguidos || // 5 consoantes || @@ -69,6 +65,35 @@ int filter(std::string text, const std::string key){ // // ) // { elimina texto: muda pra proxima chave} + int i, j, rej = REJECTED; + for(int i=0; i<4; ++i){ + if(text[i] == 'a' || text[i] == 'e' || text[i] == 'i' || text[i] == 'o' || + text[i] == 'u'){ + rej = ACCEPTED; + break; + } + } + for(i=0; i<text.size()-3; ++i){ + char l = text[i]; + int lim=3, cont=0; + if ( l=='o') + continue; + for(j=i+1; j<i+lim; ++j){ + if(text[j]=='x'){ + ++lim; + continue; + } else if (text[j] == l){ + ++cont; + continue; + } if (text[j] != l){ + break; + } + } + if(cont == 2 ) { + rej = REJECTED; + break; + } + } - return ACCEPTED; + return rej; } -- GitLab