Data de publicació: Dec 03, 2011 8:18:2 AM
/***********************************************************************************************************
* Encripta utilitzant un password *
* *
* encripta_file_v02 E fitxer.pla fitxer.encriptat *
* encripta_file_v02 D fitxer.encriptat fitxer.pla *
***********************************************************************************************************/
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
extern int errno;
#define BUFS 1024
#define CAR_BASE 0
#define CAR_FIN 255
void vector_a_nul(char v[]){
int i,long_v;
long_v=strlen(v);
for (i=0;i<long_v;i++) v[i]=0;
}
char encripta(char sms[],char sms_enc[],char password[]){
int i,j=0;
int long_sms, long_pass;
int NUMCAR = CAR_FIN - CAR_BASE;
long_sms=strlen(sms);
long_pass=strlen(password);
for (i=0;i<long_sms;i++)
sms_enc[i]=(((sms[i]-CAR_BASE)+(password[j++%long_pass]-CAR_BASE)%NUMCAR)%NUMCAR)+CAR_BASE;
sms_enc[long_sms]=0;
}
char desencripta(char sms_enc[],char sms_des[],char password[]){
int i,j=0;
int long_sms, long_pass;
int NUMCAR = CAR_FIN - CAR_BASE;
long_sms=strlen(sms_enc);
long_pass=strlen(password);
for (i=0;i<long_sms;i++)
sms_des[i]=(((sms_enc[i]-CAR_BASE)-(password[j++%long_pass]-CAR_BASE)%NUMCAR)%NUMCAR)+CAR_BASE;
sms_des[long_sms]=0;
}
int ajuda(char help[]){
/*Comprovar paràmetre help per diferents tipus d'ajud*/
printf("%s","encripta_file_v02 E fitxer.pla fitxer.encriptat");
printf("%s","encripta_file_v02 D fitxer.encriptat fitxer.pla ");
}
int test_param(){
return(1);
}
int main (int argc, char **argv)
{
int f_pla,f_enc,n;
char password[15];
char buf[BUFS+1];
char buf_enc[BUFS+1];
char buf_des[BUFS+1];
/*Control de pas de paràmetres*/
switch (argc){
case 2: ajuda(argv[1]);
exit(0);
case 4: if (test_param()) break; else exit(0);
default: exit(0);
}
/*Obre l'arxiu orige i crea l'arxiu destí segons paràmetres*/
if ((f_pla = open(argv[2], O_RDONLY, 0600)) == -1)
{
fprintf(stderr, "No trobo el fitxer: %s\n", strerror (errno));
return 1;
}
if ((f_enc = open(argv[3], O_RDWR | O_CREAT, 0600)) == -1)
{
fprintf(stderr, "No trobo el fitxer: %s\n", strerror (errno));
return 1;
}
/* Encriptar o desencriptar */
char op=argv[1][0];
/*Demana el password. Seria convenient retipejar...*/
printf("Password:");
scanf("%s",password);
/*Encripta o desencripta*/
while ( ( n=read(f_pla, buf, BUFS )) > 0)
{
buf[n]='\0';
switch(op){
case 'E':
encripta(buf,buf_enc,password);
write (f_enc,buf_enc, strlen(buf_enc));
break;
case 'D':
desencripta(buf,buf_des,password);
write (f_enc, buf_des, strlen(buf_des));
break;
}
}
/*Tanquem fitxers i controlem errors*/
close (f_pla);
close (f_enc);
if( n < 0 )
fprintf(stderr,"Problema de lectura\n");
if( n == 0 )
fprintf(stderr,"Finalitza OK\n");
return 0;
}