C语言程序设计之文件加密
发布网友
发布时间:2022-04-30 17:37
我来回答
共1个回答
热心网友
时间:2022-06-28 13:19
我写的,纯粹为了好玩。
小程序,加密自然比较简单,程序在win-tc下通过。
/* 数据安全实用程序,加密解密简单程序 */
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int flag;
char encrypt(char ch,int key)/*加密函数,把字符循环移位*/
{
if(ch>='a' && ch<='z') /* 如果是小写字母 */
{
ch=(ch-'a'+key%26)%26+'a';
}
else if(ch>='A' && ch<='Z') /* 如果是大写字母 */
{
ch=(ch-'A'+key%26)%26+'A';
}
return ch;
}
char decrypt(char ch,int key)/*解密函数,把字符循环移位*/
{
if(ch>='a' && ch<='z') /* 如果是小写字母 */
{
ch=(ch-'a'+26-key%26)%26+'a';
}
else if(ch>='A' && ch<='Z') /* 如果是大写字母 */
{
ch=(ch-'A'+26-key%26)%26+'A';
}
return ch;
}
void menu()/*菜单,1.加密,2.解密,3.显示文本文件内容*/
{
clrscr();
printf("\n=======================================================");
printf("\n1.Encrypt the text file");
printf("\n2.Decrypt the text file");
printf("\n3.Display text file contents");
printf("\n4.Quit\n");
printf("=========================================================\n");
printf("Please select a item:");
}
void logo()/*显示程序信息*/
{
printf("\n welcome to encrypt program \n ");
return;
}
void encrypt_decrypt_File(char* infile,int key, char* outfile)
{
FILE *in,*out;
char ch;
clrscr();
if((in=fopen(infile,"r"))==NULL) /* 打开欲加密或解密的文件*/
{
printf("Can not open the infile!\n");
printf("Press any key to exit!\n");
getch();
exit(0);
}
if((out=fopen(outfile,"w"))==NULL) /* 打开文件保存加密或解密后的内容*/
{
printf("Can not open the outfile!\n");
printf("Press any key to exit!\n");
fclose(in);
getch();
exit(0);
}
ch=fgetc(in); /*从文本文件中读入字符*/
while(ch!=EOF)/*加密或解密*/
{
/*如果是英文字符,则进行加密或解密,否则,不进行加密或解密处理*/
if((ch>='a' && ch<='z' ) || (ch>='A' && ch<='Z'))
{ if(flag==1)
fputc(encrypt(ch,key),out);
if(flag==2)
fputc(decrypt(ch,key),out);
}
else
fputc(ch,out);
ch=fgetc(in);
}
/*关闭输入及输出文件*/
fclose(in);
fclose(out);
}
void displayFile(char *infile) /*将文本文件的内容显示在屏幕上*/
{
FILE *fp;
char string[81];
if((fp=fopen(infile,"r"))==NULL)
{
printf("cann't open file");exit(0);
}
while(fgets(string,81,fp)!=NULL)
fputs(string,stdout); /*把所取字符串送到屏幕显示*/
fclose(fp);
}
int main()
{
int i,n;
char ch0,ch1;
char infile[40],outfile[40];
textbackground(LIGHTGRAY); /*设置背景颜色*/
textcolor(BLACK); /*设置文字颜色*/
clrscr();/*清除屏幕显示*/
logo(); /*显示程序信息*/
sleep(2);
menu(); /*显示屏幕菜单*/
ch0=getche();/*等待用户从键盘输入*/
while(ch0!='4')
{
clrscr();
if(ch0=='1') /*选择加密功能*/
{
flag=1;
printf("\nPlease input the infile to be encrypted:");
scanf("%s",infile);
printf("Please input the encrypt key:");
scanf("%d",&n);/*输入加密密码*/
printf("Please input the outfile:");
scanf("%s",outfile);/*输入存放加密内容的文件名*/
encrypt_decrypt_File(infile,n,outfile);
printf("\nEncrypt is over!\n");
sleep(1);
}else if(ch0=='2') /*选择解密功能*/
{
flag=2;
printf("\nPlease input the infile to be decrypted:");
scanf("%s",infile);
printf("Please input the decrypt key:");
scanf("%d",&n);/*输入解密密码,加密和解密密码应相同*/
printf("Please input the outfile:");
scanf("%s",outfile);/*输入存放解密内容的文件名*/
encrypt_decrypt_File(infile,n,outfile);
printf("\nDecrypt is over!\n");
sleep(1);
}else if(ch0=='3') /*选择显示文本文件功能*/
{
printf("\nPlease input the infile to be displayed:");
scanf("%s",infile);
displayFile(infile);
getch();
}else{ /*不合法输入*/
printf("\nplease input a valid number(1-4)\n");
sleep(1);
}
menu();/*显示程序菜单*/
ch0=getche(); /*等待用户下一次的功能选择*/
}
system("cls");/*清除屏幕*/
logo(); /*显示程序信息*/
printf("\nGood Bye!\n");
sleep(2);
system("pause");
return 0;
}