亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? auth.c

?? 一個使用des加密傳輸的unix下的login程序的服務器端和客戶端
?? C
字號:
/* * @(#) auth.c  RCS: $Revision: 1.4 $ $Date: 95/03/02 12:53:56 $ * * This file contains all the routines needed to interface to routines to  * perform digital signatures, and stream data encryption.  Currently it  * uses the des.  If another method is used, this module should be the only * one changed. */#define _POSIX_SOURCE#include <sys/types.h>	/* pid_t */#include <unistd.h>	/* write getpid */#include <stdio.h>#include <string.h>	/* memset memcmp */#include <ctype.h>	/* isspace */#include <stdlib.h>	/* exit free (after ctype.h for BSDI BSD/386) */#include <time.h>#include "auth.h"#include "txfr.h"#include "log.h"#include "deslogin.h"extern int verbose;typedef struct {   char     iv[DES_BLOCKSIZE];   unsigned ivlen;   keyType  key;   int 	    mode;} cipherState;cipherKey mkCipherKey(key, mode)   keyType key;   int mode;{   cipherState *cs =(cipherState *)malloc(sizeof (cipherState));   if (cs != (cipherState *) 0) {      memset(cs->iv, '\0', DES_BLOCKSIZE);      cs->ivlen = DES_BLOCKSIZE;      cs->key   = key;      cs->mode  = mode;   }   return (cipherKey) cs;}void destroyCipherKey(c)   cipherKey *c;{   register cipherState *cs = * (cipherState **) c;   if (cs != (cipherState *) 0) {      memset(cs->iv, '\0', DES_BLOCKSIZE);      cs->ivlen = 0;      cs->key   = (keyType) 0;      cs->mode  = 0;      free(cs);      *c = (cipherKey) 0;   }}void cipherData(dst, src, size, c)   char *dst, *src;   unsigned size;   cipherKey c;{   register cipherState *cs = (cipherState *) c;   if (cs->key != (keyType) 0) {      cs->ivlen = desCFB(dst, src, size, cs->iv, cs->ivlen, cs->key, cs->mode);   } else {      memcpy(dst, src, size);   }}/* * Convert a string of bytes to their hex representation */char *hexData(dst, src, size)   register char *dst, *src;   register unsigned size;{   register char *chp = dst;   if (size != 0) do {      sprintf(chp, "%.2x", * (unsigned char *) src++);      chp += 2;   } while (--size != 0);   return dst;}/* * Create a key from a keyString * * Mode: 0 = encrypt, 1 = decrypt */keyType mkKey(keyString) 		   char *keyString;{   char 	keybits[DES_BLOCKSIZE];   keyType key = (keyType) 0;   desKey(keybits, keyString, ' ');		/* hash string into 64-bits */   desMakeKey(&key, keybits, DES_BLOCKSIZE, 0);	/* always encrypt for CFB */   memset(keybits, '\0', DES_BLOCKSIZE);   return key;}/* * Perform one DES encryption(decryption if mode nonzero) (ECB mode) * * Dst and src must be exactly DES_BLOCKSIZE bytes long. */void cipherKeyString(dst, src, keyString, mode)   char *dst, *src, *keyString;   int mode;			/* 0 = encipher, 1 = decipher */{   char 	keybits[DES_BLOCKSIZE];   keyType key = (keyType) 0;   desKey(keybits, keyString, ' ');		/* hash string into 64-bits */   desMakeKey(&key, keybits, DES_BLOCKSIZE, mode);   memset(keybits, '\0', DES_BLOCKSIZE);   des(dst, src, key);   desDestroyKey(&key);}/* * Generate a unique session key from the challenge.  The idea here is to allow * the program on both the client and server side to destroy the user's  * private key from memory ASAP.  If a user on the local machine tries to * scan the process memory, they can only compromise the session key and not * the user's long-term login key. */keyType sessionKey(challenge, keyString, mode)   char *challenge, *keyString;   int mode;{   char    keybits[DES_BLOCKSIZE];   keyType res = (keyType) 0;   cipherKeyString(keybits, challenge, keyString, 0);		/* encrypt */   desMakeKey(&res, keybits, DES_BLOCKSIZE, mode);   memset(keybits, '\0', DES_BLOCKSIZE);   return res;}/** Issue and validate a crypto challenge * * Returns: session key if success, 0 if failure */keyType challenge(fd, keyString, timeout)   int fd;   char *keyString;   unsigned timeout;{   char plainText[DES_BLOCKSIZE], cipherText[DES_BLOCKSIZE];   char buf[DES_BLOCKSIZE], buf2[DES_BLOCKSIZE*2+1];   int wcount, rcount, res;   keyType result = (keyType) 0;   /*    * The challenge message must be unpredictable and ideally, never reused    * to prevent playback, or anticipating the next challenge response    *    * To make it unpredictable, take the current time + current pid , and     * encipher it once with the user's key.  This is then used as the     * plaintext of the challenge.      */   memset(cipherText, '\0', DES_BLOCKSIZE);   time((time_t *) &cipherText[0]);   * (unsigned *) &cipherText[4] = (unsigned) getpid();   cipherKeyString(plainText, cipherText, keyString, 0);   cipherKeyString(cipherText, plainText, keyString, 0);	/* encrypt */   if (debug) {      log("%s: challenge(%s)\n", 	  progName, hexData(buf2, cipherText, DES_BLOCKSIZE));   }   wcount = write(fd, cipherText, DES_BLOCKSIZE);   if (wcount != DES_BLOCKSIZE) {      log("%s: challenge--write failed; %s\n", progName, ERRMSG);      exit(1);   }   cipherKeyString(buf, cipherText, keyString, 1);	/* decrypt */   rcount = getBlock(fd, buf, DES_BLOCKSIZE, timeout);	/* decrypt */   if (debug) {      if (rcount > 0) {	 log("%s: response(%s)\n", progName, hexData(buf2, buf, DES_BLOCKSIZE));      }   }   /*    * The remote user deciphers the challenge and it'd better be the same    * as the one we originally enciphered to be a valid signature    */   if (rcount == DES_BLOCKSIZE) {      res = memcmp(buf, plainText, DES_BLOCKSIZE);      if (res == 0) {	 result = sessionKey(cipherText, keyString, 0);      }   }   return result;}/* * Wait for and respond to a crypto challenge return the session key. */keyType signature(fd, keyString, timeout)   int fd;   char *keyString;   unsigned timeout;{   keyType res = (keyType) 0;   char plainText[DES_BLOCKSIZE], cipherText[DES_BLOCKSIZE];   register int wcount = -1, rcount;   rcount = getBlock(fd, cipherText, DES_BLOCKSIZE, timeout);   if (rcount == DES_BLOCKSIZE) {      cipherKeyString(plainText, cipherText, keyString, 1);	/* decrypt */      wcount = write(fd, plainText, rcount);      res = sessionKey(cipherText, keyString, 0);   }   return res;}/* * Find the corresponding passphrase for the given user name. * * The user file is a sequence of lines with username passphrase pairs * Lines beginning with '#' are comments, empty lines are permitted. * * Returns: -2 if key incorrect, -1 if open failed, 0 no such user, 1 success */int getUserPhrase(fname, phrase, size, uname, key)   char *fname;   register char *phrase;   register unsigned size;   char *uname;   keyType key;{   register int i;   char cipherChar, ch;   register int res = -2, state = 0;   register char *chp = 0;   FILE *f = fopen(fname, "r");   cipherKey ck = (cipherKey) 0;   ck = mkCipherKey(key, 1);		/* decrypt */   if (f == NULL) return -1;   do {      i = getc(f);      if (i == EOF)  {	 res = 0; 	 break;      }      cipherChar = (char) i;      cipherData(&ch, &cipherChar, 1, ck);      if (ch & 0x80) break;		/* non-printable character: stop! */      switch (state) {      case 0:					 if (ch == '#') { 	    state = 1;	    break;	 } 	 chp = uname;	 state = 2;			/* fall through */      case 2:				/* user field leading whitespace */	 if (ch == '\n') state = 0;	 if (ch == '#') {	    state = 1;	    break;	 }	 if (isspace(ch)) break;	/* newline is also whitespace */	 state = 3;			/* fall through */      case 3:				/* user field */	 if (!isspace(ch)) {	    if (*chp++ != ch) state = 1;	 } else {	    if (*chp == '\0') {		/* match? */	       if (ch == '\n') state = 6; else state = 4;	       if (verbose) log("founduser\n");	    } else {	       state = 0;	    }	 }	 break;      case 1:				/* skip remainder of line */	 if (ch == '\n') state = 0;	 break;      case 4:				/* passphrase leading whitespace */	 if (ch == '\n') state = 6;	 if (isspace(ch)) break;	 state = 5;			/* fall through */	 chp = phrase;      case 5:				/* passphrase */	 if (ch == '\n') {	    if (size != 0) *chp = '\0';	    state = 6;	    res   = 1;	 }  else {	    if (size != 0) {	       *chp++ = ch;	       --size;	    }	 }	 break;      }   } while (state != 6);   destroyCipherKey(&ck);   fclose(f);   return res;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产你懂的| 国产视频911| 不卡一区在线观看| 亚洲最新在线观看| 精品国产91洋老外米糕| 99这里只有久久精品视频| 亚洲国产精品成人久久综合一区| av成人免费在线观看| 丝瓜av网站精品一区二区| 欧美一区二区大片| 99久久99久久久精品齐齐| 日韩成人一区二区三区在线观看| 国产农村妇女精品| 欧美大片免费久久精品三p| 99久久久久免费精品国产| 国产在线视频精品一区| 一区二区三区四区蜜桃| 国产精品美女久久久久久久久| 欧美日韩亚洲综合一区二区三区| 99久久婷婷国产精品综合| 久久99蜜桃精品| 捆绑紧缚一区二区三区视频| 亚洲一区二区三区视频在线| www久久精品| 日韩免费看网站| 欧美电视剧免费全集观看| 欧美色图免费看| 在线播放亚洲一区| 欧美人xxxx| 7777精品伊人久久久大香线蕉超级流畅 | 精品一二线国产| 亚洲成av人片一区二区| 一区二区免费看| 夜夜操天天操亚洲| 三级欧美韩日大片在线看| 亚洲大片一区二区三区| 亚洲欧洲99久久| 欧美一二三在线| 日韩欧美国产电影| 国产日韩欧美电影| 亚洲欧美在线视频观看| 日韩理论片一区二区| 亚洲精品视频在线看| 亚洲图片欧美综合| 免费精品视频在线| 国产剧情一区二区| 99riav久久精品riav| 欧美日韩免费一区二区三区 | 亚洲欧洲av色图| 亚洲国产精品麻豆| 国产在线播放一区三区四| 不卡一区二区在线| 欧美日韩美少妇| 精品久久久久一区二区国产| 国产精品美女久久久久久久久| 亚洲一级二级三级在线免费观看| 视频一区在线视频| 99v久久综合狠狠综合久久| 93久久精品日日躁夜夜躁欧美| 日韩欧美国产综合| 亚洲第一在线综合网站| 岛国一区二区三区| 日韩视频在线你懂得| 亚洲人成在线观看一区二区| 日韩国产欧美在线视频| 一本到一区二区三区| 国产欧美一区二区精品性色超碰| 日韩av午夜在线观看| 97久久超碰国产精品| 亚洲国产成人一区二区三区| 国产精品白丝av| 精品粉嫩aⅴ一区二区三区四区| 麻豆91在线看| 精品处破学生在线二十三| 精彩视频一区二区三区| 久久综合九色综合欧美就去吻| 精品午夜一区二区三区在线观看| 精品国产乱码91久久久久久网站| 奇米一区二区三区av| 久久亚洲一区二区三区四区| 免费精品视频在线| 国产日韩高清在线| 91黄色免费看| 免费美女久久99| 国产亚洲欧美在线| 国产成人av电影在线| 综合久久久久综合| 欧美日本在线看| 国产高清成人在线| 亚洲精品日产精品乱码不卡| 欧美日韩色综合| 狠狠色丁香婷综合久久| 国产精品国模大尺度视频| 欧美视频完全免费看| 日本vs亚洲vs韩国一区三区二区 | 久久嫩草精品久久久久| 成人av网址在线| 免费精品视频在线| 一区二区三区在线视频观看| 精品欧美乱码久久久久久| 97国产一区二区| 国产精一区二区三区| 亚洲黄色av一区| 久久久亚洲午夜电影| 欧美日韩三级在线| 91在线播放网址| 精品一区二区三区在线观看国产| 亚洲精品视频一区| 国产精品久久久久影院老司| 欧美电视剧在线看免费| 91精品国产综合久久精品麻豆| 99精品国产91久久久久久 | 国产在线国偷精品免费看| 午夜激情综合网| 亚洲自拍偷拍综合| 亚洲三级在线看| 国产日韩在线不卡| 精品盗摄一区二区三区| 日韩一区二区三区视频在线观看| 欧美日韩午夜精品| 欧美视频一区二区在线观看| 91在线小视频| 一本色道综合亚洲| 豆国产96在线|亚洲| 国产成人精品免费| www.久久久久久久久| 成人激情免费网站| 成人av在线网| 91视频www| 精品视频免费在线| 欧美一级午夜免费电影| 亚洲精品在线网站| 中文字幕精品三区| 午夜精品久久久久久久久久久| 视频一区欧美精品| 国内久久婷婷综合| 99久久国产免费看| 欧美视频一区二区三区四区| 日韩一区二区免费在线观看| 欧美成人精品高清在线播放| 国产精品国产三级国产普通话三级 | 国产精品乱码久久久久久| 亚洲一区二区三区视频在线播放 | 国产成人一区二区精品非洲| 成人av影视在线观看| 欧美无乱码久久久免费午夜一区| 欧美一区二区高清| 国产精品久久久久7777按摩| 亚洲国产精品久久久久婷婷884| 蜜乳av一区二区| 91丨九色丨尤物| 久久无码av三级| 亚洲国产另类av| 成人午夜看片网址| 欧美一区二区性放荡片| 国产精品卡一卡二| 久久精品国产精品亚洲红杏| 色婷婷久久99综合精品jk白丝 | 欧美大片免费久久精品三p| 一区二区在线免费观看| 粉嫩13p一区二区三区| 91精品国产色综合久久不卡蜜臀| 亚洲欧美二区三区| 成人精品一区二区三区四区| 精品国产凹凸成av人网站| 日本欧美肥老太交大片| 欧洲日韩一区二区三区| 国产精品美女久久久久aⅴ | 97久久精品人人爽人人爽蜜臀| 久久众筹精品私拍模特| 精品夜夜嗨av一区二区三区| 欧美日韩中字一区| 日韩在线一区二区| 欧美日韩电影在线| 日韩国产高清在线| 欧美成人免费网站| 国产精品99久| 国产精品久久久久久亚洲伦| 激情偷乱视频一区二区三区| 久久综合色鬼综合色| 国产成人在线色| 成人欧美一区二区三区小说| 成人av电影在线网| 一区二区三区精品| 91精品久久久久久久99蜜桃| 美脚の诱脚舐め脚责91| 欧美v亚洲v综合ⅴ国产v| 国产69精品一区二区亚洲孕妇| 亚洲激情在线激情| 精品视频免费看| 激情综合亚洲精品| 亚洲色图一区二区| 欧美日韩视频在线一区二区 | 精品一区在线看| 国产欧美一区二区精品性| 91蜜桃视频在线| 免费欧美日韩国产三级电影| 国产精品美女视频| 91精品蜜臀在线一区尤物| 成人91在线观看|