dvigenere.c

来自「简单的vigenere解密及其解密功能实现代码」· C语言 代码 · 共 82 行

C
82
字号
#include <stdio.h>#include <string.h>#include <malloc.h>#include "dvigenere.h"#define BASE 26extern char *dvigenere_encrypt( char *p, char *k, int l ){	int i, keylen = strlen(k);	char *c;		c = (char *) malloc ( sizeof(char)*(strlen(p)+1) );	if( NULL==c ) return (NULL);	for( i=0; i<l; i++ )	{		if( blowerletter( *(p+i) ) ) 			*(c+i) = ( *(p+i) - 'a' + getoffset(*(k+(i%keylen))) ) % BASE + 'A';		else if( bpowerletter( *(p+i) ) )			*(c+i) = ( *(p+i) - 'A' + getoffset(*(k+(i%keylen))) ) % BASE + 'a';		else			*(c+i) =  *(p+i);//		printf( "encrypt [ %c ] with key [ %c:%d ] as the resule [ %c ]\n", *(p+i), *(k+(i%keylen)), getoffset(*(k+(i%keylen))), *(c+i) );	}	*(c+i) = '\0';	return (c);};extern char *dvigenere_decrypt( char *c, char *k, int l ){	int i, j;	char *p;		p = (char *) malloc ( sizeof(char)*(strlen(c)+1) );	if( NULL==c ) return (NULL);	for( i=0; i<l; i++ )	{		if( blowerletter( *(c+i) ) ) 			*(p+i) = ( *(c+i) - 'a' + BASE - getoffset(*(k+i%(strlen(k)))) ) % BASE + 'A';		else if( bpowerletter( *(c+i) ) )			*(p+i) = ( *(c+i) - 'A' + BASE - getoffset(*(k+i%(strlen(k)))) ) % BASE + 'a';		else			*(p+i) =  *(c+i);	}	*(p+i) = '\0';	return (p);};extern int getoffset( char c ){	if( blowerletter(c) )		return (c-'a');	else if( bpowerletter(c) )		return (c-'A');	else		return 0;}extern int blowerletter( char c ){	if( c>='a' && c<='z' )		return 1;	else		return 0;};extern int bpowerletter( char c ){	if( c>='A' && c<='Z' )		return 1;	else		return 0;};

⌨️ 快捷键说明

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