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

📄 crypt.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* *	A one-rotor machine designed along the lines of Enigma *	but considerably trivialized. */#define ECHO 010#include <stdio.h>#define ROTORSZ 256#define MASK 0377char	t1[ROTORSZ];char	t2[ROTORSZ];char	t3[ROTORSZ];char	*getpass();setup(pw)char *pw;{	int ic, i, k, temp, pf[2];	unsigned random;	char buf[13];	long seed;	strncpy(buf, pw, 8);	while (*pw)		*pw++ = '\0';	buf[8] = buf[0];	buf[9] = buf[1];	pipe(pf);	if (fork()==0) {		close(0);		close(1);		dup(pf[0]);		dup(pf[1]);		execl("/usr/lib/makekey", "-", 0);		execl("/lib/makekey", "-", 0);		exit(1);	}	write(pf[1], buf, 10);	wait((int *)NULL);	if (read(pf[0], buf, 13) != 13) {		fprintf(stderr, "crypt: cannot generate key\n");		exit(1);	}	seed = 123;	for (i=0; i<13; i++)		seed = seed*buf[i] + i;	for(i=0;i<ROTORSZ;i++)		t1[i] = i;	for(i=0;i<ROTORSZ;i++) {		seed = 5*seed + buf[i%13];		random = seed % 65521;		k = ROTORSZ-1 - i;		ic = (random&MASK)%(k+1);		random >>= 8;		temp = t1[k];		t1[k] = t1[ic];		t1[ic] = temp;		if(t3[k]!=0) continue;		ic = (random&MASK) % k;		while(t3[ic]!=0) ic = (ic+1) % k;		t3[k] = ic;		t3[ic] = k;	}	for(i=0;i<ROTORSZ;i++)		t2[t1[i]&MASK] = i;}main(argc, argv)char *argv[];{	register i, n1, n2;	if (argc != 2){		setup(getpass("Enter key:"));	}	else		setup(argv[1]);	n1 = 0;	n2 = 0;	while((i=getchar()) >=0) {		i = t2[(t3[(t1[(i+n1)&MASK]+n2)&MASK]-n2)&MASK]-n1;		putchar(i);		n1++;		if(n1==ROTORSZ) {			n1 = 0;			n2++;			if(n2==ROTORSZ) n2 = 0;		}	}}

⌨️ 快捷键说明

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