1 /* 2 Encrypt data. 3 */ 4 #include "encrypt.h" 5 #include <unistd.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #ifdef RANDOM_DEV 9 #include <sys/types.h> 10 #include <sys/stat.h> 11 #include <fcntl.h> 12 #else 13 #include <time.h> 14 #endif 15 16 char *cryptdata(unsigned char key[256], unsigned char *data, int size) { 17 int i; 18 static char *result; 19 result=malloc(size); 20 for (i=0;i<size;i++) { 21 result[i]=key[(int) data[i]]; 22 } 23 return(result); 24 } 25 26 char *decryptdata(unsigned char key[256], unsigned char *data, int size) { 27 int i; 28 char reversekey[256]; 29 static char *result; 30 result=malloc(size); 31 for (i=0;i<256;i++) reversekey[(int) key[i]]=i; 32 for (i=0;i<size;i++) { 33 result[i]=reversekey[(int) data[i]]; 34 } 35 return(result); 36 } 37 38 char *generatekey(void) { 39 static char key[256]; 40 char used[256]; 41 int i,x; 42 #ifdef RANDOM_DEV 43 unsigned char buff[1]; 44 int fd; 45 fd=open(RANDOM_DEV, O_RDONLY); 46 #endif 47 for (i=0;i<256;i++) used[i]=0; 48 for (i=0;i<256;i++) { 49 #ifdef RANDOM_DEV 50 read(fd, buff, 1); 51 x=buff[0]; 52 #else 53 srand(time(NULL)%rand()); 54 x=1+(int) (255.0*rand()/(RAND_MAX+1.0)); 55 #endif 56 if (used[x]==0) { key[i]=x; used[x]=1; } else { i--; } 57 } 58 #ifdef RANDOM_DEV 59 close(fd); 60 #endif 61 return(key); 62 } |