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

📄 enkeys.c

📁 3des 算法 Richard Outerbridge 本人写的一个不错的版本
💻 C
字号:
/*	enkeys.c - *	A simple DES calculator. *	Graven Imagery. * *	Copyright (c) 1988,1989,1990,1991,1992 Richard Outerbridge */#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include "d3des.h"/* *	1. Define for triple keys, single text	--->	#define D3DES *	2. Define for triple keys, single text	--->	#define D3DDES *	3. single-length keys, single-length text-->  if D3DES and D3DDES not defined */#define D3DDESextern int main(void);extern void put8hex(unsigned char *);extern void get8hex(unsigned char *);extern void put16hex(unsigned char *);extern void get16hex(unsigned char *);extern void put24hex(unsigned char *);extern void get24hex(unsigned char *);extern int getone(void);#ifdef D3DES#define primer(a,b) des3key((a),(b))#define docryp(a,b) Ddes((a),(b))#define getkey(a) get24hex((a))#define putkey(a) put24hex((a))#define getptx(a) get8hex((a))#define putptx(a) put8hex((a))char	Welcome[]	= "EDE 3/1 DES encryptor.  In response\n";char	Keyform[]	= "\tKey:    xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (24 pairs hex)\n";char	Txtform[]	= "\tInput:  xx xx xx xx xx xx xx xx (8 pairs hex)\n";#else#ifdef D3DDES#define primer(a,b) des3key((a),(b))#define docryp(a,b) D2des((a),(b))#define getkey(a) get24hex((a))#define putkey(a) put24hex((a))#define getptx(a) get16hex((a))#define putptx(a) put16hex((a))char Welcome[] = "EDE 3/2 DES encryptor.  In response\n";char Keyform[] = "\tKey:    xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (24 pairs hex)\n";char Txtform[] = "\tInput:  xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx (16 pairs hex)\n";#else#define primer(a,b) deskey((a),(b))#define docryp(a,b) des((a),(b))#define getkey(a) get8hex((a))#define putkey(a) put8hex((a))#define getptx(a) get8hex((a))#define putptx(a) put8hex((a))char Welcome[] = "Simple 1/1 DES encryptor.  In response\n";char Keyform[] = "\tKey:    xx xx xx xx xx xx xx xx (8 pairs hex)\n";char Txtform[] = "\tInput:  xx xx xx xx xx xx xx xx (8 pairs hex)\n";#endif#endifint main(void){	unsigned char	block[16];	unsigned char	key2[24];	int 			endeflg;	int			val;	int			mode;		fprintf(stdout, "%s", Welcome);	fprintf(stdout, "to the prompts, enter - \n\n");	fprintf(stdout, "\tEn/De:  [edsxq] (encrypt decrypt show quit)\n");	fprintf(stdout, "%s", Keyform);	fprintf(stdout, "%s", Txtform);	for(;;)	{		fprintf(stdout, "\n\tEn/De:  ");		mode = getone();		switch( mode )		{			case 'e':				endeflg = 0;				break;							case 'd':				endeflg = 1;				break;							case 's' :				fprintf(stdout, "\tKey:    ");				putkey(key2);				fprintf(stdout, "\tOutput: ");				putptx(block);				continue;							case 'q' :				fprintf(stdout, "\nSo long for now, folks!\n");				exit(0);							default:				continue;		}		fprintf(stdout, "\tKey:    ");		getkey(key2);		primer(key2, endeflg);               		fprintf(stdout, "\tInput:  ");		getptx(block);		docryp(block, block);		fprintf(stdout, "\tOutput: ");		putptx(block);	}	return( 0 );}void put8hex(block)unsigned char *block;{	int val;	int out1;	int out2;		for( val=0; val<4; val++ )	{		out1 = *block++;		out2 = *block++;		fprintf(stdout, "%02x%02x ", out1&0377, out2&0377);	}		putc('\n', stdout);	return;}void get8hex(into)unsigned char *into;{	int val;	int in;	for( val = 0; val < 8; val++ )	{		if( scanf("%2x", &in) == 0 )		{			getc(stdin);			return;		}		into[val] = in&0377;	}		return;}       int getone(void){	int val;	        while( ((val = getc(stdin)) == '\r') || (val == '\n') );		        if( val!=EOF && isupper(val) )		val = tolower(val);		        return(val);}       void put16hex(block)unsigned char *block;{	int val;	int out1;	int out2;		for( val=0; val<8; val++ )	{		out1 = *block++;		out2 = *block++;		fprintf(stdout, "%02x%02x ", out1&0377, out2&0377);	}		putc('\n', stdout);	return;}void get16hex(into)unsigned char *into;{	int val;	int in;	for( val=0; val<16; val++ )	{		if( scanf("%2x", &in) == 0 )		{			getc(stdin);			return;		}		into[val] = in&0377;	}		return;}               void put24hex(block)unsigned char *block;{	int val;	int out1;	int out2;	for( val=0; val<12; val++ )	{		out1 = *block++;		out2 = *block++;		fprintf(stdout, "%02x%02x ", out1&0377, out2&0377);	}		putc('\n', stdout);	return;}void get24hex(into)unsigned char *into;{	int val, in;	for( val = 0; val < 24; val++ )	{		if( scanf("%2x", &in) == 0 )		{			getc(stdin);			return;		}		into[val] = in&0377;	}	return;}

⌨️ 快捷键说明

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