前言:
此刻同学们对“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数据加密算法