编一程序,对一个文本文件进行加密处理,最简单的加密方法就是代替加密法:把文件中的所有字母都以字母顺序表内相距某一距离的另一字母来代替。比如,如果每一字母都以偏移3个位置的另一字母来代替,则abcdefghijklmnopqtstuvwxyz将变成defghijklmnopqtstuvwxyzabc。
要求从键盘输入要加密的文件名、加密后的文件名和加密字母偏移量
下面的例子,暂只考虑了偏移量大于等于0的情况,仅供参考,代码如下:
参考链接:
http://ascii.wjccx.com/
#include <stdio.h>
int main(void){
char oriFile[20];
char encryptionFile[20];
int offset;
FILE * ofp,*efp;
printf("请输入要加密文件的文件名:");
scanf("%s",oriFile);
ofp=fopen(oriFile,"r");
if(ofp==NULL){
printf("要加密的文件%s打开失败,程序退出!\n");
return 0;
}
printf("请输入加密后的文件名:");
scanf("%s",encryptionFile);
efp=fopen(encryptionFile,"w");
if(efp==NULL){
printf("加密后的文件%s创建失败,程序退出!\n");
return 0;
}
printf("请输入字母的偏移量:");
scanf("%d",&offset);
if(offset<0){
printf("字母偏移量需大于0,程序退出!\n");
return 0;
}
int ch ;
while(feof(ofp)==0){
fscanf(ofp,"%c",&ch);
if(feof(ofp)==0){
// http://ascii.wjccx.com/
if(ch>='A'&&ch<='Z'){
ch = (ch+offset-'A')%26+'A'; // 原字母加上偏移量减去起始字母'A'后的值再对26求余即为在整个大写字母里的偏移量,再加上'A'即为最终偏移后的字母
}else if(ch>='a'&&ch<='z'){
ch = (ch+offset-'a')%26+'a';//同理,原字母加上偏移量减去起始字母'a'后的值再对26求余即为在整个小写字母里的偏移量,再加上'a'即为最终偏移后的字母
}
fprintf(efp,"%c",ch);
}
}
fclose(ofp);
fclose(efp);
printf("加密完成!\n") ;
return 0;
}