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")
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.