c语言文件加密和解密方法如下:
1、首先打开VC++6.0;
2、选择文件,新建;
3、选择C++ source file 新建一个空白文档;
4、声明头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
首先写个加密函数,算法就是简介里说的
void EncryptFile(FILE *sfp,FILE *dfp,char 者册pwd)
{
char ch
if(sfp==0||dfp==0)
{
printf("ERROR!\n")
悉运return
}
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=(ch-'a'+1)%26+'a'
ch=ch^pwd
}
if((ch>='A')&&(ch<='Z'))
{
ch=(ch-'A'+1)%26+'A'
ch=ch^pwd
}
fputc(ch,dfp)
}
}
写解密子函数:与加密的过程相反
void DecryptFile(FILE *sfp,FILE *dfp,char pwd)
{
char ch
while((ch=fgetc(sfp))!=EOF)
{
if((ch>='a')&&(ch<='z'))
{
ch=ch^pwd
睁嫌梁 ch=(ch-'a'+25)%26+'a'
}
if((ch>='A')&&(ch<='Z'))
{
ch=ch^pwd
ch=(ch-'A'+25)%26+'A'
}
fputc(ch,dfp)
}
}
输出函数,输出文件内容
void OutputFile(FILE *fp)
{
char ch
while((ch=fgetc(fp))!=EOF)
putchar(ch)
}
主函数,主要调用这几个函数
int main()
{
/*用户输入的要加密的文件名*/
char sfilename[20]
/*用户输入加密后保存的文件名*/
char dfilename[20]
/*用来保存密码字符*/
char pwd
FILE *sfp,*dfp
printf("\nPlease input filename to be encrypted:\n")
/*得到要加密的文件名*/
gets(sfilename)
/*得到加密后你要的文件名*/
printf("input filename to save the encrypted file:\n")
gets(dfilename)
/*得到加密字符*/
printf("Please input your Password:\n")
//scanf("%c",&pwd)
pwd=getch()
/*屏幕以*来表示输入的加密字符*/
printf("*\n")
/*以只读方式打开要加密的文件*/
if((sfp=fopen(sfilename,"r"))==0)
{
printf("Can't open the file :%s\n",sfilename)
exit(0)
}
/*输出要加密的文件*/
printf("\nThe the text of file to be encrypted is:\n")
OutputFile(sfp)
/*建立加密后的文件*/
if((dfp=fopen(dfilename,"w+"))==0)
{
printf("Can't open or create the file :%s\n",dfilename)
//exit(0)
}
/*文件加密*/
fseek(sfp,0L,SEEK_SET)
EncryptFile(sfp,dfp,pwd)
printf("\n\nEncrypted the file successfully!\n")
/*输出加密后的文件*/
printf("\nAfter encrypting the text of file is:\n")
fseek(dfp,0L,SEEK_SET)
OutputFile(dfp)
fclose(sfp)
fclose(dfp)
getch()
return 0
}
这道题,并不难,只是楼主,没有说清,是就字母移位吗?但是看你的例子,有不全是。
程序如下:
#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
}
文件中啊!(C)首先file1中存一些信息(直接在文件中手写或者通过源程序从屏幕中读取)
大致过程{
fp1 = fopen("file1", "w")//write
scanf("%c", &ch1)//用while循环多次写入
fprintf(fp1, "%c", ch1);
}
第辩渗腔二:从文件中读取内容,和0x6a异或
fp2 = fopen ("file1", "r")//read
fp3 = fopen ("file2", "w")//write
fscanf(fp2, "%c", &ch2)//用while循环多次读出
异或 *** 作,结携衫果赋给ch3
printf("%c", ch )//屏幕显示
fprintf(fp3, "%c", ch3)//写入file2中
第三:读出file2的内容
fp3 = fopen ("file2", "r")//read
fscanf(fp3, "%c", &ch4)//用while循环多次读出
printf(“%c”, ch );
大概过程就是这样,喊厅文件主要是自己写才能掌握,这里就不把代码给你了。
上面的部分代码给你参考一下。有问题欢迎询问
源程序只是负责 *** 作;file1和file2是存放数据的文件,可以看成结构体。
文件 *** 作好好学,很重要!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)