⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 __descrpt.c

📁 一套客户/服务器模式的备份系统代码,跨平台,支持linux,AIX, IRIX, FreeBSD, Digital Unix (OSF1), Solaris and HP-UX.
💻 C
字号:
/****************** Start of $RCSfile: __descrpt.c,v $  ****************** $Source: /home/alb/afbackup/afbackup-3.3.8.1/RCS/__descrpt.c,v $* $Id: __descrpt.c,v 1.2 2004/07/08 20:34:42 alb Exp alb $* $Date: 2004/07/08 20:34:42 $* $Author: alb $********* description *********************************************************************************************************************/#include <conf.h>#include <version.h>  static char * fileversion = "$RCSfile: __descrpt.c,v $ $Source: /home/alb/afbackup/afbackup-3.3.8.1/RCS/__descrpt.c,v $ $Id: __descrpt.c,v 1.2 2004/07/08 20:34:42 alb Exp alb $ " PACKAGE " " VERSION_STRING;#include <unistd.h>#include <fcntl.h>#include <errno.h>#include <genutils.h>#include <fileutil.h>#include <x_types.h>#include <crptauth.h>#include "cryptkey.h"#include "backup.h"#include "des_aux.h"#ifndef XOR#define XOR(a,b)	(((a) & ~(b)) | (~(a) & (b)))#endif#ifndef	ENCRYPT				/* should be defined in des.h */#define	ENCRYPT			1#endif#define	WEAK_ENCRYPTION		(ENCRYPT << 1)static	UChar	*initstring = "Albi's encryption initialization string";static	des_key_schedule	accesskeys[2];static Int32set_crptkey(UChar * filename){  struct stat	statb;  Int32		i, fd, ret = 0;  Uns32		factor, prevval, newval;  UChar		buf[100], *kptr, *endptr, *bufptr;  des_cblock	rawkeys[2];  buf[0] = '\0';  if(filename){    i = stat(filename, &statb);    if(i)      ret = ENOENT;    else{      fd = open(filename, O_RDONLY);      if(fd < 0){	ret = EACCES;      }      else{	i = read(fd, buf, 99);	close(fd);	if(i < 0)	  i = 0;	buf[i] = '\0';      }    }  }  if(ret || !filename)    strncpy(buf, ACCESSKEYSTRING, 99);  if(!buf[0])    memset(buf, 0x5a, 99);  buf[99] = '\0';  memset(rawkeys, 0x5a, 2 * sizeof(des_cblock));  kptr = (UChar *) &(rawkeys[0]);  endptr = kptr + 2 * sizeof(des_cblock);  bufptr = buf + 1;  prevval = buf[0] % 0x40;  factor = 0x40;  forever{    if(! *bufptr)	break;    newval = prevval + factor * ((*bufptr) % 0x40);    factor *= 0x40;    if((newval & 0xff) == (prevval & 0xff) && factor >= 0x0100){	*kptr = (prevval & 0xff);	kptr++;	if(kptr >= endptr)	  break;	factor /= 0x0100;	newval /= 0x0100;    }    prevval = newval;    bufptr++;  }  while(kptr < endptr && prevval){    *(kptr++) = prevval & 0xff;    prevval /= 0x0100;  }  if(des_set_key(rawkeys, accesskeys[0])			|| des_set_key(rawkeys + 1, accesskeys[1]))    ret = -1;  return(ret);}static Uns32crpt(UChar * outbuf, UChar * buf, Int32 len, Int8 flags, Int8 in){  static Int8		initialized = 0;  static des_cblock	ivec[2];  UChar		mask, *cptr;  Int32		i;  Int8		encrypt, weak;  encrypt = (flags & ENCRYPT) ? 1 : 0;  weak = (flags & WEAK_ENCRYPTION) ? 1 : 0;  if(in)    initialized = 0;  if(! initialized){    cptr = (UChar *) ivec;    mask = 0xdf;    for(i = 0; i < sizeof(des_cblock) * 2; i++, cptr++){      *cptr = XOR(mask, initstring[i]);      mask = XOR(mask, initstring[i]);    }    initialized = 1;  }  if(weak)    des_cbc_encrypt((des_cblock *) buf, (des_cblock *) outbuf,			len * sizeof(UChar),			accesskeys[0], ivec, encrypt);  else#ifndef	LIBDESBUG_COMPATIBILITY    des_ede2_cbc_encrypt((des_cblock *) buf, (des_cblock *) outbuf,			len * sizeof(UChar),			accesskeys[0], accesskeys[1], ivec, encrypt);#else    des_3cbc_encrypt((des_cblock *) buf, (des_cblock *) outbuf,			len * sizeof(UChar),			accesskeys[0], accesskeys[1],			ivec, ivec + 1, encrypt);#endif}voidusage(UChar * pname){  fprintf(stderr, "Usage: %s [ -dw ] [ -k <cryptkeyfile> ]\n",		FN_BASENAME(pname));  exit(2);}main(int argc, char ** argv){  UChar		ibuf[256], obuf[256];  UChar		decrypt = 0, encrypt = 0, *cryptfile = NULL, weak = 0;  Int32		i, nsh = 4, n;  i = goptions(-argc, (UChar **) argv, "b:e;b:d;s:k;b:w",			&encrypt, &decrypt, &cryptfile, &weak);  if(i || (encrypt && decrypt))    usage(argv[0]);  if(weak)    weak = WEAK_ENCRYPTION;  set_crptkey(cryptfile);  if(! decrypt){    while((i = read_forced(0, ibuf + 1, 255)) > 0){      ibuf[0] = (UChar) i;      n = ((((i + 1) - 1) >> nsh) + 1) << nsh;      crpt(obuf, ibuf, n, ENCRYPT | weak, 0);      write_forced(1, obuf, n);    }  }  else{    while((i = read_forced(0, ibuf, 256)) > 0){      n = (((i - 1) >> nsh) + 1) << nsh;      crpt(obuf, ibuf, n, weak, 0);      write_forced(1, obuf + 1, obuf[0]);    }  }  exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -