C语言(文件的移位与加密解密)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言(文件的移位与加密解密)相关的知识,希望对你有一定的参考价值。

将某一已知文件的内容以字符形式读出,根据密钥(用户从键盘输入)将对应字符的ASCII码进行移位操作即可,解密时移动相反,最后将加密或解密后的文件保存。如加密:设原文为ab#5cd,密钥为5,则有ab#5cd每个字母向后移动5位,可得到密文(乱码)fg(10hi。

最好以课设报告形式给出 如不能也可~

这道题,并不难,只是楼主,没有说清,是就字母移位吗?
但是看你的例子,有不全是。
程序如下:
#include <stdio.h>
#include <stdlib.h>

FILE *source;//源文件
FILE *destination;//目标文件
int key;//密钥
char file[100];//文件名
void encryption()//加密

char ch;
printf("请输入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)

printf("无法打开文件!\n");
exit(0);

printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)

printf("无法创建文件!\n");
exit(0);

printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)

if(ch=='\n')

fputc(ch,destination);
ch=fgetc(source);
continue;

ch+=key;
fputc(ch,destination);
ch=fgetc(source);

fclose(source);
fclose(destination);


void decrypt()//解密

char ch;
printf("请输入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)

printf("无法打开文件!\n");
exit(0);

printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)

printf("无法创建文件!\n");
exit(0);

printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)

if(ch=='\n')

fputc(ch,destination);
ch=fgetc(source);
continue;

ch-=key;

fputc(ch,destination);
ch=fgetc(source);

fclose(source);
fclose(destination);


int main()//主函数提供菜单

int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("请输入1 2 3选择操作\n");
scanf("%d",&choice);

switch(choice)

case 1:encryption();break;
case 2:decrypt();break;
case 3:break;

return 0;
参考技术A #include<stdio.h>
void code(char *p,int key)

while(*p!='\0')

*p=97+(*p-97+key)%26;
p++;


void uncode(char *p,int key)

while(*p!='\0')

*p=97+(*p-71-key)%26;
p++;


main()

char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)

code(str,key);
printf("密文为%s\n",str);

else if(n==2)

uncode(str,key);
printf("原文为%s\n",str);

参考技术B //---------------------------------------------------------------------------

#include <stdio.h>

void encryption(const char *fname) /*对文件路径为fname的文件进行加密*/

int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL)
fprintf(stderr,"FILE NOT FOUND!\n");
return ;

printf("path of the encrypted file:");
gets(efname); /*输入加密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行加密,并写入密文文件*/

fputc(ch+offset,fp1);

fclose(fp1);
fclose(fp);
puts("Success!");


void decryption(const char *fname) /*对文件路径为fname的文件进行解密*/

int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL)
fprintf(stderr,"FILE NOT FOUND!\n");
return ;

printf("path of the declassified document :");
gets(efname); /*输入解密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行解密,并写入明文文件*/

fputc(ch-offset,fp1);

fclose(fp1);
fclose(fp);
puts("Success!");

int main(void)


char fpname[256];

puts("A.Encryption");
puts("B.Decryption");
printf("Input A or B(other to EXIT) :"); /*输入a为加密,输入b为解密,输入其它字符则退出程序*/
switch(getchar())

case 'a':
case 'A':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要加密的明文文件路径*/
encryption(fpname); /*调用加密函数对文件进行加密*/
break;
case 'b':
case 'B':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要解密的密文文件路径*/
decryption(fpname); /*调用解密函数对文件进行解密*/
break;
default:break;


return 0;

//---------------------------------------------------------------------------
参考技术C 全部缩进到首行了,ALT+F8可以自动对齐~~用最简单的C写的,一目了然!设文件为1.txt
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAXLONGTH 5000 //如果文件内容较长,请修改MAXLONGTH

void show()//显示源文件内容

FILE *fp;
char ch;
if((fp=fopen("1.txt","r"))==NULL)

printf("打开文件失败!\n");
getch();
exit(1);

ch=fgetc(fp);
while (ch!=EOF)

putchar(ch);
ch=fgetc(fp);

fclose(fp);


void jiami(int num) //密码算法,入口参数:密钥

FILE *fp;
char ch;
char strbuffer[MAXLONGTH];
int bufsize = 0;
if((fp=fopen("1.txt","r"))==NULL)

printf("打开文件失败!\n");
getch();
exit(1);

ch=fgetc(fp);
while (ch!=EOF)

ch = ch+num;
putchar(ch);
strbuffer[bufsize]=ch;
bufsize++;
ch=fgetc(fp);

strbuffer[bufsize]='\0';
printf("\n\n");
fclose(fp);
if((fp=fopen("1.txt","w+"))==NULL) //重写文件

printf("写入文件失败,任意键退出!");
getch();
exit(1);

fputs(strbuffer,fp);
fclose(fp);

void main()

int num = 0;
int chooce = 0;
printf("源文件内容如下:\n");
show();
printf("\n\n请输入密匙:");
scanf("%d",&num);
printf("*****************\n");
printf("** 1.加密 **\n");
printf("** 2.解密 **\n");
printf("*****************\n");
printf("请选择文件处理方式:");
scanf("%d",&chooce);
while(chooce)
switch(chooce)
case 1: //加密算法
printf("\n加密结果------->");
jiami(num);
chooce = 0;
break;
case 2: //解密算法
num = -num;
printf("\n解密结果------->");
jiami(num);
chooce = 0;
break;
default:
printf("\n无效请求,请重新选择文件处理方式:");
scanf("%d",&chooce);

参考技术D /*
程序功能:通过移位的方法加密/解密文件
程序说明:本程序的源文件生成可执行文件后(.exe结尾),保存在一个目录中。
要加密/解密的文件必须已经存在这个目录中,否则会提示无法打开文件。
接着按程序提示即可完成指定操作。
程序流程:选择操作类型->打开输入文件(要加密/解密的文件的文件名称)->输入密钥
->打开输出文件(保存加密/解密后的文件的文件名称)->加密/解密
*/
#include <stdio.h>
int main(int argc, char *argv[])

FILE * infile=NULL; //输入文件指针
FILE * outfile=NULL; //输出文件指针
int key; //密钥
int operation=0; //操作类型,加密---1,解密---2
char filename[100],tempfile[1000],data;

while(1)

infile=outfile=NULL;
operation=0;
//选择操作类型
while(!(operation==1||operation==2))

printf("请选择【加密---1 解密---2】:");
scanf("%d",&operation);
//处理非法输入
if(!(operation==1||operation==2))
printf("选择有误,请重新选择!\n");

//打开输入文件
while(infile==NULL)

printf("\n输入要打开的文件文件名称:");
scanf("%s",filename);
//以只读方式打开文件流
infile=fopen (filename,"r");
//打开文件流失败,重新输入文件名
if(infile==NULL)
printf("\n无法打开文件,请检查文件是否存在后重新输入!");

//输入密钥
printf("\n输入密钥:");
scanf("%d",&key);

if(operation==1)
printf("\n输入保存加密后文件的名称:");
else
printf("\n输入保存解密后文件的名称:");
scanf("%s",filename);
//以读写方式打开输出文件
outfile=fopen (filename,"w+");

while((data=fgetc(infile))!=EOF)//逐个字符读出输入文件的内容

if(operation==1) //加密
fputc(data+key,outfile);
else //解密
fputc(data-key,outfile);


//输出加密/解密的过程
if(operation==1)
printf("\n加密过程:");
else
printf("\n解密过程:");
rewind(infile); //文件指针回到文件开始处
while((data=fgetc(infile))!=EOF)
printf("%c",data);

printf(" --> ");

rewind(outfile);
while((data=fgetc(outfile))!=EOF)
printf("%c",data);

printf("\n\n");
fclose(infile); //关闭文件流
fclose(outfile);


return 0;

采用字符的移位方式实现字符文本加密解密。

Scanner sc=new Scanner(System.in);
System.out.println("需要解密的内容是");
String str=sc.nextLine();//输入解密前的内容

System.out.print("您的内容解密之后是:"+str.replaceAll("A", "c").replaceAll("B", "d").replaceAll("C", "e")
.replaceAll("D", "f").replaceAll("E", "g").replaceAll("F", "h").replaceAll("G", "i").replaceAll("H", "j")
.replaceAll("I", "k").replaceAll("J", "l").replaceAll("K", "m").replaceAll("L", "n").replaceAll("M", "o")
.replaceAll("N", "p").replaceAll("O", "q").replaceAll("P", "r").replaceAll("Q", "s").replaceAll("R", "t")
.replaceAll("S", "u").replaceAll("T", "v").replaceAll("U", "w").replaceAll("V", "x").replaceAll("W", "y")
.replaceAll("X", "z").replaceAll("Y", "a").replaceAll("Z", "b"));//解密后的内容

技术分享

 

以上是关于C语言(文件的移位与加密解密)的主要内容,如果未能解决你的问题,请参考以下文章

C语言练习_2用C语言实现凯撒密码加密解密

采用字符的移位方式实现字符文本加密解密。

c语言 文件加密与解密

js实现密码加密(1.只对字母移位16位加密2.base64加密)

c语言 文件加密与解密

c语言 文件加密与解密