Criptografia em XOR
Olá pessoal quero compartilhar com vocês um código fonte de um programa que implemeta o Algoritmo de Criptografia XOR, se gostou agradeça, se foi útil comentem.
Abraços.
WCG147
Olá pessoal quero compartilhar com vocês um código fonte de um programa que implemeta o Algoritmo de Criptografia XOR, se gostou agradeça, se foi útil comentem.
Código:
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; char xorcrypt(char ch, long key) //Função para retornar um caractere XOR'ed por uma chave longa { return ch ^ key; //retorno ch XOR'ed pela chave } void error(void) { cout << endl << "Fatal Error, tente uma chave diferente para este arquivo." << endl; exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { ifstream inf; //variável do arquivo de entrada ofstream outf; //variável do arquivo de saída unsigned loc; //localização em string utilizada para pesquisa string fn; //string para arquivo long key; //armazena a chave para o programa char tmp; //variável para armazenar caracteres lidos do arquivo de entrada if(argc == 3) //se dois argumentos de linha de comando foram passados { fn = argv[1]; //analisar o elemento da primeira linha de comando como nome do arquivo original key = strtol(argv[2],NULL,0); //analisar o elemento da segunda linha de comando como a chave longa inf.open(fn.c_str()); //arquivo de entrada aberto } else { cout << endl << "Por favor Entre com chave de criptografia: "; //prompt do usuário para a chave de criptografia cin >> key; //obter a chave de cin } while(!inf.is_open()) //enquanto um dos arquivos não está devidamente aberto { cout << endl << "Por favor, Digite nome de arquivo válido para xor-Crypt: "; //prompt do usuário para um nome de arquivo cin >> fn; //tomar fn_orig de cin inf.open(fn.c_str()); //arquivo de entrada aberto } loc = fn.find(".enc"); //Verificar se o arquivo já contém extensão. enc if(loc != string::npos) //se o arquivo for encontrado - { fn.replace(loc,4,".orig"); // - substitui último enc com orig.. } else { fn += ".enc"; //nome criptografado é o mesmo que o original. enc } outf.open(fn.c_str()); //arquivo de saída aberta while(inf) //enquanto arquivo de entrada não chega EOF { inf.get(tmp); //começar o próximo caractere if(inf) //se o arquivo ainda não estiver em EOF { if(xorcrypt(tmp,key) != EOF) //enquanto o caractere criptografado pela chave não é ilegal { outf.put(xorcrypt(tmp,key)); //caractere criptografado em arquivo de saída } else { inf.close(); //arquivo de entrada outf.close(); //arquivo de saída fn = "del " + fn; //adiciona "del" para o inicio do nome do aruivo atual system(fn.c_str()); //executa comando delete error(); //informar o erro ao sair } } } inf.close(); //arquivo de entrada outf.close(); //arquivo de saída return 0; }
WCG147
Comment