Exercício 8.4. A operação ou exclusivo bit-a-bit (^), tem a seguintes propriedades: (i) x^0=x, (ii)x^x=0 e (ii)(x^y)^z = x^(y^z). Usando essa operação podemos criar um método de criptografia com senha.
Seja m um caracter da mensagem e s um caracter da senha. Para criptografar m, fazemos m^s e obtermos o caracter criptografado c. Para ter m de volta, basta fazer c^s. Como c = (m^s), pelas propriedades acima, segue que c^s = (m^s)^s = m^(s^s) = m^0= m. Usando esse método, crie um programa para criptografia que receba a senha e os nomes dos arquivos de origem e destino via argumentos da linha de comando. [Dica: utilize as letras da senha ciclicamente, de modo que os caracteres da mensagem não sejam criptografados sempre com a mesma letra.
Segue um trecho do código. (codebox, não está "funciano")
#include "stdafx.h"
#include "string.h"
#include "stdlib.h"
void main(int argc, char *argv[]) {
FILE *entrada, *saida;
char c,senha[20],confSenha[20];
if( argc!=3 ) {
printf("Faltam Parametros ex: cripto <c> <d> <nome do arquivo>\n");
exit(1);
}
if( argc[1] !='c' || argc[1] !='d') {
printf("Erro de parametros ex: cripto <c> <d> <nome do arquivo>\n");
exit(1);
}
do{
printf("Digite a senha: ");
gets(senha);
printf("Confirmacao de senha: ");
gets(confSenha);
if(strcmp(senha, confSenha) != 0)
printf("senha não confere");
}while(strcmp(senha, confSenha) != 0);
if((entrada = fopen(argv[2],"rb"))== NULL){
printf("Arquivo não pode ser aberto\n");
exit(1);
}
if((saida = fopen("temp.txt","wb"))== NULL){
printf("Arquivo não pode ser aberto\n");
exit(1);
}
if( argc[1]=='c'){
while(1) {
// fputc('@',s);
c = fgetc(entrada);
if(feof(entrada)) break;
fputc(~c,saida);
}
} else {
while(1) {
c = fgetc(entrada);
if(feof(entrada)) break;
fputc(~c,saida);
}
}
fcloseall();
unlink(argv[2]);
rename("temp.txt",argv[2]);
unlink("temp.txt");
getchar();
}
Pergunta
jnoise
Pessoal preciso de ajuda em um exercício
Exercício 8.4. A operação ou exclusivo bit-a-bit (^), tem a seguintes propriedades: (i) x^0=x, (ii)x^x=0 e (ii)(x^y)^z = x^(y^z). Usando essa operação podemos criar um método de criptografia com senha.
Seja m um caracter da mensagem e s um caracter da senha. Para criptografar m, fazemos m^s e obtermos o caracter criptografado c. Para ter m de volta, basta fazer c^s. Como c = (m^s), pelas propriedades acima, segue que c^s = (m^s)^s = m^(s^s) = m^0= m. Usando esse método, crie um programa para criptografia que receba a senha e os nomes dos arquivos de origem e destino via argumentos da linha de comando. [Dica: utilize as letras da senha ciclicamente, de modo que os caracteres da mensagem não sejam criptografados sempre com a mesma letra.
Segue um trecho do código. (codebox, não está "funciano")
#include "stdafx.h" #include "string.h" #include "stdlib.h" void main(int argc, char *argv[]) { FILE *entrada, *saida; char c,senha[20],confSenha[20]; if( argc!=3 ) { printf("Faltam Parametros ex: cripto <c> <d> <nome do arquivo>\n"); exit(1); } if( argc[1] !='c' || argc[1] !='d') { printf("Erro de parametros ex: cripto <c> <d> <nome do arquivo>\n"); exit(1); } do{ printf("Digite a senha: "); gets(senha); printf("Confirmacao de senha: "); gets(confSenha); if(strcmp(senha, confSenha) != 0) printf("senha não confere"); }while(strcmp(senha, confSenha) != 0); if((entrada = fopen(argv[2],"rb"))== NULL){ printf("Arquivo não pode ser aberto\n"); exit(1); } if((saida = fopen("temp.txt","wb"))== NULL){ printf("Arquivo não pode ser aberto\n"); exit(1); } if( argc[1]=='c'){ while(1) { // fputc('@',s); c = fgetc(entrada); if(feof(entrada)) break; fputc(~c,saida); } } else { while(1) { c = fgetc(entrada); if(feof(entrada)) break; fputc(~c,saida); } } fcloseall(); unlink(argv[2]); rename("temp.txt",argv[2]); unlink("temp.txt"); getchar(); }Desde já agradeço.
Jnoise.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.