龙空技术网

c语言计算简易文件加密/解密系统

额度Y 286

前言:

此刻同学们对“c数据加密算法”可能比较关切,兄弟们都需要剖析一些“c数据加密算法”的相关资讯。那么小编在网摘上汇集了一些有关“c数据加密算法””的相关内容,希望你们能喜欢,大家快快来了解一下吧!

题目要求:

用C语言实现一个简易的文件加密/解密系统。该系统采用对称加密体制,由用户指定自己的密钥key。加密函数可描述为:M=P+key;对应的解密函数可描述为:P=M-key。其中P表示8位的明文数据,M表示8位的密文数据。系统要求提供一个字符菜单界面,可以对任意格式的文件进行加密/解密操作。

#include "stdio.h"

void encryption(char buffer[],int file_size,int key);

void decryption(char buffer[],int file_size,int key);

void Process(int a);

int openSrcFile(char **buffer);

int saveDstFile(char *buffer);

void menu();

main()

{

char op_code;

menu(); /*显示字符菜单*/

op_code = getchar(); /*从终端接收一个用户键入的操作码*/

getchar();

while(op_code != 'Q') /*终端循环,直到输入Q退出*/

{

switch(op_code)

{

case 'E':Process('E');break;

case 'D':Process('D');break;

default:printf("Input Operation Code Error!\n");break;

}

getchar();

op_code = getchar();

getchar();

}

}

void menu()

{

printf("*******************************************************\n");

printf(" =========A SIMPLE ENCRYPTION / DECRYPTION SYSTEM=========\n");

printf(" ENCRYPTION press 'E' DECRYPTION press 'D' QUIT press 'Q' \n" );

printf("*******************************************************\n");

}

int readSrcFile(char **buffer)

{

FILE *myfile_src; /*源文件指针*/

char filename[20]; /*文件名数组*/

long file_size; /*记录文件的长度*/

printf("Please input the path and filename of the file you want to process\n");

scanf("%s",filename);

if(!(myfile_src = fopen(filename,"rb")))

{

printf("ERROR!\n");

return -1;

}

fseek(myfile_src,0,SEEK_END);

file_size = ftell(myfile_src);

fseek(myfile_src,0,SEEK_SET);

*buffer = (char *)malloc(file_size);

fread(*buffer,1,file_size,myfile_src); /*读入文件*/

fclose(myfile_src);

return file_size;

}

void Process(char op_code)

{

FILE *myfile_dst;

char * buffer;

int key;

long file_size; /*记录文件的长度*/

file_size = readSrcFile(&buffer); /*读入源文件*/

if (file_size == -1) {

printf("Cannot read this file.\n");

return;

}

printf("Have read\n");

printf("Please input the key (a integer) for encryption or decryption\n");

scanf("%d",&key); /*用户输入密钥*/

if(op_code == 'E')

{

/*加密状态*/

encryption(buffer,file_size,key);

}

else if (op_code == 'D')

{

/*解密状态*/

decryption(buffer,file_size,key);

}

if(!saveDstFile(buffer,file_size)) /*保存处理后的文件*/

{

printf("Cannot save this file.\n");

return;

}

printf("Save done\n");

}

int saveDstFile(char *buffer,long file_size)

{

FILE *myfile_dst; /*源文件指针*/

char filename[20]; /*文件名数组*/

printf("Please input the path and filename of the file you want to save\n");

scanf("%s",filename);

if(!(myfile_dst = fopen(filename,"wb")))

{

printf("ERROR!\n");

return 0;

}

fwrite(buffer,1,file_size,myfile_dst);

fclose(myfile_dst);

return 1;

}

void encryption(char buffer[],int file_size,int key)

{

int i;

for( i = 0; i < file_size; i++)

buffer[i] = buffer[i] + key; /* M=P+key */

}

void decryption(char buffer[],int file_size,int key)

{

int i;

for( i = 0; i < file_size; i++)

buffer[i] = buffer[i] - key; /* P=M-ke y*/

}

运行结果:

运行结果

标签: #c数据加密算法