扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//自己写的加密,加密方法就是根据输入的密码对文件中的内容进行异或后存放在加密后的文件中
创新互联专注于企业营销型网站建设、网站重做改版、海南网站定制设计、自适应品牌网站建设、H5场景定制、成都做商城网站、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为海南等各大城市提供网站开发制作服务。
//转载请声明program by STU caige
#includestdio.h
#includestdlib.h
#include conio.h//getche()需要
#includestring.h
char ch;
//异或函数
int YiHuo(FILE *f0,FILE *fp,int passwordnum,int move,char key)
{
while(fread(ch,1,1,f0),!feof(f0))
{
if (key==49)//加密
{
ch=ch+move;
(char)(ch^=passwordnum);
fwrite(ch,1,1,fp);
}
if (key==50)//解密
{
(char)(ch^=passwordnum);
ch=ch+move;
fwrite(ch,1,1,fp);
}
}
}
int main()
{
//encrypt加密 decrypt解密
FILE *f0,*fe,*fd;
char fname0[50];
char efname[50]={0};
char dfname[50]={0};
char Password[50]={0},key=0,key2=0;
char sysfname[20]={0};
int p=0,passwordnum,move=0;//异或后移动的次数 ;
system("cls");
do
{
system("cls");
do
{
printf("1-----------加密文件\n");
printf("2-----------解密文件\n");
printf("Esc----------退出\n") ;
key=getch();//读入一个键盘码
}
while ((key!='1')(key!='2')(key!=27));
Password[50]=0;
passwordnum=0;
if (key==49)
{
system("cls");
printf("请输入要加密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("加密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开efname
if(key==49)
{
system("cls");
printf("请输入完成加密的文件存储路径\n");
scanf("%s",efname);
if ((fe=fopen(efname,"w+"))==NULL)
{
printf("文件打不开哦!\n");
printf("加密失败\n");
fclose(f0);
system("pause");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==49)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move9)
move=(int)(move%9);
printf("%d",move);system("pause");
}
if (key==49)
{//异或加密
system("cls");
YiHuo(f0,fe,passwordnum,move,key);
printf("\n加密成功,您的输出文件路径为:\n");
printf("%s",efname);
fclose(f0);
fclose(fe);
}
}
if (key==50)
{
system("cls");
printf("请输入要解密的文件绝对路径\n");
scanf("%s",fname0);
// while(key=0)
//打开原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不开哦!\n");
key=0;//文件打开失败时key的值改变
exit(0);
printf("解密失败\n");
system("pause");
}
//只有文件fname0打开成功时才能继续打开dfname
if(key==50)
{
system("cls");
printf("请输入完成解密的文件存储路径\n");
scanf("%s",dfname);
if ((fd=fopen(dfname,"w+"))==NULL)
{
printf("解密失败");
fclose(f0);
system("pause");
printf("文件打不开哦!\n");
exit(0);
key=0;
}
}
//如果打开文件成功则开始输入密码
if(key==50)
{
system("cls");
printf("请输入密码\n");
scanf("%s",Password);
//把字符密码转化为整形来异或
for(p=0;Password[p]!=0;p++)
passwordnum+=((int)Password[p]);
move=(int)(passwordnum%9);
while (move9)
move=(int)(move%9);
move=(-move);
}
if (key==50)
{//异或加密
system("cls");
YiHuo(f0,fd,passwordnum,move,key);
printf("\n解密成功,您的输出文件路径为:\n%S",dfname);
system("pause");
fclose(f0);
fclose(fd);
}
}
}
while(key!=27);//当key为0,即读写两个文件都打开成功时才结束循环
return 0;
printf("\n谢谢使用!,program by STU caige\n");
system("pause");
}
c语言文件加密和解密方法如下:
1、首先打开VC++6.0;
2、选择文件,新建;
3、选择C++ source file 新建一个空白文档;
4、声明头文件
#includestdio.h
#includestdlib.h
#includestring.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 string.h
char user[]="输入的帐号", pwd[]="输入的密码";
if (strcmp("真实帐号", user) == 0 strcmp("对应密码", pwd) == 0) {
printf("验证成功!");
} else {
printf("帐号或密码错误!");
}
这里使用的是按位加密,按ASCII码进行加密的算法自己写个,很容易的。
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
void dofile(char *in_fname,char *pwd,char *out_fname);/*对文件进行加密的具体函数*/
void usage(char *name);
void main(int argc,char *argv[])/*定义main()函数的命令行参数*/
{
char in_fname[30];/*用户输入的要加密的文件名*/
char out_fname[30];
char pwd[10];/*用来保存密码*/
if(argc!=4)
{/*容错处理*/
usage(argv[0]);
printf("\nIn-fname:\n");
gets(in_fname);/*得到要加密的文件名*/
while(*in_fname==NULL)
{
printf("\nIn-fname:\n");
gets(in_fname);
}
printf("Password 6-8:\n");
gets(pwd);/*得到密码*/
while(*pwd==NULL || strlen(pwd)8 || strlen(pwd)6)
{
printf("Password 6-8:\n");
gets(pwd);
}
printf("Out-file:\n");
gets(out_fname);/*得到加密后你要的文件名*/
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
else
{/*如果命令行参数正确,便直接运行程序*/
strcpy(in_fname,argv[1]);
strcpy(pwd,argv[2]);
strcpy(out_fname,argv[3]);
while(*pwd==NULL || strlen(pwd)8 || strlen(pwd)6)
{
printf("Password faied!\n");
printf("Password 6-8:\n");
gets(pwd);
}
while(!strcmp(in_fname,out_fname))
{
printf("文件名不能和源文件相同\n");
printf("Out-file:\n");
gets(out_fname);
while(*in_fname==NULL)
{
printf("Out-file:\n");
gets(out_fname);
}
}
dofile(in_fname,pwd,out_fname);
printf("加密成功,解密请再次运行程序\n");
}
}
/*加密子函数开始*/
void dofile(char *in_fname,char *pwd,char *out_file)
{
FILE *fp1,*fp2;
register char ch;
int j=0;
int j0=strlen(pwd);
fp1=fopen(in_fname,"rb");
if(fp1==NULL)
{
printf("cannot open in-file.\n");
exit(1);/*如果不能打开要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot open or create out-file.\n");
exit(1);/*如果不能建立加密后的文件,便退出*/
}
/*加密算法开始*/
while(j0=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j=j0?j=0:j++],fp2);/*异或后写入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*关闭源文件*/
fclose(fp2);/*关闭目标文件*/
}
void usage(char *name)
{
printf("\t=======================File encryption======================\n");
printf("\tusage: %s In-fname password out_fname\n",name);
printf("\tExample: %s file1.txt 12345678 file2.txt\n",name);
}
要删除*号的话,稍微改一下if(pwd==8)的处理,比如:
if(pwd==8)
{
if (zu 0)
{
zuce.Pwd[zu-1]='\0';
zu--;
printf("%c",(char)8);
printf(" ");
printf("%c",(char)8);
}
// continue;
}else
用C的话密码可能差不多就这样处理吧,当然你的程式还需要改进一下,比如如果输入的超过数组的容量就skip掉,避免内存溢出。还有对一些无效的字符比如箭头按键,tab键等都skip掉,也就是限制合法字符的范围。
#includestdio.h
#includeconio.h //用getch()函数时要的文件头
#includestring.h
#define PWD "admin" //这里定义初始密码
void main()
{
char pwd[16], ch;
int cnt=0, i=0;
while(cnt3) //3次机会输入正确密码
{
printf("please enter the password to continue:\n"); //输出的字符应该都在双引号之内
while((ch=getch())!=13i16) //用getch()来接收输入字符
{
putchar('*'); //将输入的密码转换成字符*
pwd[i]=ch;
i++;
}
pwd[i]=0;
if(!strcmp(PWD,pwd)) {//密码正确则跳出循环并提示登录成功
printf("\nlogin successful!\n");
break;
}
else
printf("\nincorrect password!\n");
cnt++;
}
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流