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

📄 rsa.c

📁 这个是RSA加密算法C源程序
💻 C
字号:
/********************************************************************************									       **	Copyright (c) Martin Nicolay,  22. Nov. 1988			       **									       **	Wenn diese (oder sinngemaess uebersetzte) Copyright-Angabe enthalten   **	bleibt, darf diese Source fuer jeden nichtkomerziellen Zweck weiter    **	verwendet werden.						       **									       **	martin@trillian.megalon.de					       **									       ********************************************************************************/#include	<stdio.h>#include	<string.h>#include	<memory.h>#include	"arith.h"#include	"nio.h"#define	ENCODE	"rsaencode"#define	DECODE	"rsadecode"char *prog;int	clear_siz;			/* clear-text blocksize		*/int	enc_siz;			/* encoded blocksize		*/					/* clear_siz < enc_siz		*/do_crypt( s, d, len, e )char *s;char *d;NUMBER *e;{	static char hex[] = "0123456789ABCDEF";	NUMBER n;	char buf[ STRLEN + 1 ];	char *pb,*ph;	int i,c;		ph = buf + STRLEN;	ph[1] = '\0';		for (i=len; i; i--) {		c = *s++;		*ph-- = hex[ (c >> 4) & 0xF ];		*ph-- = hex[ c & 0xF ];	}	ph++;		num_sget( &n, ph );		m_exp( &n, e, &n );		num_sput( &n, buf, STRLEN +1 );		ph = buf + (i=strlen(buf)) -1;		for (; len; len--) {		if (i-- > 0) {			c = (strchr( hex, *ph ) - hex) << 4;			ph--;		}		else			c=0;		if (i-- > 0) {			c |= strchr( hex, *ph ) - hex;			ph--;		}		*d++ = c;	}}		int get_clear( p )char *p;{	int n;		n = fread( p, 1, clear_siz, stdin );		if (n <= 0)		return(0);		memset( p + n, 0, enc_siz - n );		return(1);}int get_enc( p )char *p;{	int n;	n = fread( p, 1, enc_siz, stdin );		if (n != enc_siz)		return(0);		return(1);}int put_clear( p )char *p;{	int n;		n = fwrite( p, 1, clear_siz, stdout );		if (n != clear_siz)		return(0);	return(1);}int put_enc( p )char *p;{	int n;	n = fwrite( p, 1, enc_siz, stdout );		if (n != enc_siz)		return(0);		return(1);}main( argc, argv )char **argv;{	char buf[ STRLEN*2 ];	NUMBER n,e;	FILE *keys;	int (*inp)() = 0;	int (*out)() = 0;		if ( ! (prog=strrchr( argv[0], '/' )) )		prog=argv[0];			if ( ! strcmp( prog, DECODE ) ) {		inp = get_enc;		out = put_clear;	}	if ( ! strcmp( prog, ENCODE ) ) {		inp = get_clear;		out = put_enc;	}		if (! inp) {		fprintf(stderr,"%s: don't know who i am (%s or %s)\n",prog,ENCODE,DECODE);		exit(1);	}		if (argc != 2) {		fprintf(stderr,"usage: %s keyfile\n",prog);		exit(1);	}	if ( !( keys= fopen(argv[1],"r")) ) {		perror(argv[1]);		exit(1);	}		num_fget( &n, keys ); getc(keys);	num_fget( &e, keys );	if (a_cmp(&n,&e) <= 0 || e.n_len == 0 || getc(keys) != EOF) {		fprintf(stderr,"%s: corrupt keyfile\n",prog);		fprintf(stderr,"keyfile format:\n");		fprintf(stderr,"\t<n in hex>\n");		fprintf(stderr,"\t<delimiter> (1 char)\n");		fprintf(stderr,"\t<e/d in hex>\n");		fprintf(stderr,"white spaces are ignored\n");		exit(1);	}		enc_siz = ( n_bitlen( &n ) + 7 ) / 8;	clear_siz = enc_siz -1;		m_init( &n, NUM0P );		while ( (*inp)( buf ) ) {		do_crypt( buf, buf, enc_siz, &e );		if (! (*out)( buf ) ) {			perror("output");			exit(1);		}	}		exit(0);}

⌨️ 快捷键说明

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