home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 144.lha / crypt.c < prev    next >
C/C++ Source or Header  |  1986-11-21  |  1KB  |  55 lines

  1. /*must be linked with the math library, i.e   lc -Lm crypt.c*/
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <fcntl.h>
  5.  
  6. void setcrypt(string)
  7.     /*not a horribly intelligent way of making a seed, but it'll do*/ 
  8.     unsigned char *string;
  9.     {
  10.     long seed = 0;
  11.     unsigned char *ptr;
  12.     for (ptr=string; *ptr; ptr++) seed = seed*2 + *ptr;
  13.     srand48(seed);
  14.     }
  15.  
  16. unsigned char next()
  17.     /*get next random character*/
  18.     {
  19.     union res
  20.         {
  21.         long x;    
  22.         unsigned char c[4];
  23.         } result;
  24.     unsigned char nextchar;
  25.     result.x = mrand48();
  26.     nextchar = result.c[0] + result.c[1] + result.c[2] + result.c[3];
  27.     return(nextchar);
  28.     }
  29.  
  30.  
  31. void main(argc,argv)
  32.     int argc;
  33.     char *argv[];
  34.     {
  35.     char c,key[21];
  36.     int infile, outfile;
  37.     if (argc < 3) {puts("crypt: usage is   crypt infile outfile"); exit(20);}
  38.     infile = open(argv[1],O_RDONLY,0);
  39.     if(poserr(argv[1])) exit(20);
  40.     outfile = creat(argv[2],0);
  41.     if(poserr(argv[2])) exit(20);
  42.     key[20] = '\0'; /*just in case he types too long a string*/
  43.     puts("Enter encryption/decryption key");
  44.     fflush(stdout);
  45.     if (!fgets(key,20,stdin) || key[0] == '\n') exit(10);
  46.     setcrypt(key);
  47.     while(1 == read(infile,&c,1))
  48.         {
  49.         c ^= next();
  50.         write(outfile,&c,1);
  51.         }
  52.     close(infile);            
  53.     close(outfile);
  54.     }
  55.