📄 enkeys.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 + -