我的算法应该接收扩展名为.crp的文件并使用关键字对其进行解密,生成.drp扩展文件(它也可以从.txt加密到.crp)。我不知道为什么它不会生成.drp文件,即使它可以从.txt文件条目创建.crp文件。
总结:.txt>> .crp有效,但.crp>> .drp无效。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[]){
char a[50],b[50],c[50],d[50],e[50],entrada[200],saida[200],ch,crp[4],drp[4];
int i,j=0,k;
FILE *entra,*sai;
.
//recebimento de argumento externos pelo DOS
if(argc>=2){
strcpy(entrada,argv[1]);
}else{
printf("Nome do arquivo: ");
gets(entrada);
}
strcpy(crp,".crp");
strcpy(drp,".drp");
//verifica o formato do arquivo de entrada
k=0;
for(i=strlen(entrada)-4;i<strlen(entrada);i++){
if(entrada[i]==crp[k]){
j++;
}
k++;
}
//Converte o formato do arquivo de entrada
//extensão .drp
if(j==4){
k=0;
strcpy(saida,entrada);
for(i=strlen(entrada)-4;i<strlen(entrada);i++){
saida[i]=drp[k];
k++;
}
}else{//extensão .crp
k=0;
strcpy(saida,entrada);
for(i=strlen(entrada)-4;i<strlen(entrada);i++){
saida[i]=crp[k];
k++;
}
}
//Leitura no modo binário com possibilidade de reescritura
entra=fopen(entrada,"r+b");
sai=fopen(saida,"w+b");
//Caso não receba nenhum arquivo de entrada
if(entra==NULL||sai==NULL){
printf("Falha na abertura de arquivos\n");
exit(0);
}
//leitura do arquivo de entrada
i=0;
ch=fgetc(entra);
while(ch!=EOF){
a[i]=ch;
ch=fgetc(entra);
i++;
}
for(i=0;i<strlen(a)-2;i++){
e[i]=a[i];
}
//Inserir palavra chave
printf("Palavra chave: ");
gets(b);
//Encriptação
j=0;
for(i=0;i<strlen(e);i++){
c[i]=b[j];
j++;
if(j==strlen(b)){
j=0;
}
}
for(i=0;i<strlen(c)-2;i++){
b[i]=c[i];
}
for(i=0;i<strlen(a);i++){
d[i]=e[i]^b[i];
}
//Passagem do string para o arquivo de saida
for(i=0;i<strlen(d)-2;i++){
fputc(d[i],sai);
}
//fechamento do file
fclose(entra);
fclose(sai);
return 0;
}