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
}
这个加密有简单的,有复杂的。要是简单的就直接选择文件中的某些字段,将某些字段进行1定的转换或在文件中位置的变更等。也能够将其中的每一个2进制读取,然落后行1定的运算后再存储,到达加密的效果。最后再依照1定的逆操作,恢复原来的文件,到达解密的效果。大致思路就是这样的,具体就看你的加解密的算法复杂与否了!举个非常简单的例子,可以将读取的某个数与1个你自己知道的固定的数做“异或”运算,解密的时候,你再次和这个数做“异或”运算,就能够恢复原来的那个数。这就是1种简单的加密算法,看似简单,不过却比较经常使用,由于,参与异或运算的值只有你自己知道。