//自己寫(xiě)的加密,加密方法就是根據(jù)輸入的密碼對(duì)文件中的內(nèi)容進(jìn)行異或后存放在加密后的文件中
創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、海南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場(chǎng)景定制、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為海南等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
//轉(zhuǎn)載請(qǐng)聲明program by STU caige
#includestdio.h
#includestdlib.h
#include conio.h//getche()需要
#includestring.h
char ch;
//異或函數(shù)
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;//異或后移動(dòng)的次數(shù) ;
system("cls");
do
{
system("cls");
do
{
printf("1-----------加密文件\n");
printf("2-----------解密文件\n");
printf("Esc----------退出\n") ;
key=getch();//讀入一個(gè)鍵盤碼
}
while ((key!='1')(key!='2')(key!=27));
Password[50]=0;
passwordnum=0;
if (key==49)
{
system("cls");
printf("請(qǐng)輸入要加密的文件絕對(duì)路徑\n");
scanf("%s",fname0);
// while(key=0)
//打開(kāi)原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不開(kāi)哦!\n");
key=0;//文件打開(kāi)失敗時(shí)key的值改變
exit(0);
printf("加密失敗\n");
system("pause");
}
//只有文件fname0打開(kāi)成功時(shí)才能繼續(xù)打開(kāi)efname
if(key==49)
{
system("cls");
printf("請(qǐng)輸入完成加密的文件存儲(chǔ)路徑\n");
scanf("%s",efname);
if ((fe=fopen(efname,"w+"))==NULL)
{
printf("文件打不開(kāi)哦!\n");
printf("加密失敗\n");
fclose(f0);
system("pause");
exit(0);
key=0;
}
}
//如果打開(kāi)文件成功則開(kāi)始輸入密碼
if(key==49)
{
system("cls");
printf("請(qǐng)輸入密碼\n");
scanf("%s",Password);
//把字符密碼轉(zhuǎn)化為整形來(lái)異或
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("請(qǐng)輸入要解密的文件絕對(duì)路徑\n");
scanf("%s",fname0);
// while(key=0)
//打開(kāi)原文件
if ((f0=fopen(fname0,"rb"))==NULL)
{
printf("文件打不開(kāi)哦!\n");
key=0;//文件打開(kāi)失敗時(shí)key的值改變
exit(0);
printf("解密失敗\n");
system("pause");
}
//只有文件fname0打開(kāi)成功時(shí)才能繼續(xù)打開(kāi)dfname
if(key==50)
{
system("cls");
printf("請(qǐng)輸入完成解密的文件存儲(chǔ)路徑\n");
scanf("%s",dfname);
if ((fd=fopen(dfname,"w+"))==NULL)
{
printf("解密失敗");
fclose(f0);
system("pause");
printf("文件打不開(kāi)哦!\n");
exit(0);
key=0;
}
}
//如果打開(kāi)文件成功則開(kāi)始輸入密碼
if(key==50)
{
system("cls");
printf("請(qǐng)輸入密碼\n");
scanf("%s",Password);
//把字符密碼轉(zhuǎn)化為整形來(lái)異或
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);//當(dāng)key為0,即讀寫(xiě)兩個(gè)文件都打開(kāi)成功時(shí)才結(jié)束循環(huán)
return 0;
printf("\n謝謝使用!,program by STU caige\n");
system("pause");
}
c語(yǔ)言文件加密和解密方法如下:
1、首先打開(kāi)VC++6.0;
2、選擇文件,新建;
3、選擇C++ source file 新建一個(gè)空白文檔;
4、聲明頭文件
#includestdio.h
#includestdlib.h
#includestring.h
首先寫(xiě)個(gè)加密函數(shù),算法就是簡(jiǎn)介里說(shuō)的;
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);
}
}
寫(xiě)解密子函數(shù):與加密的過(guò)程相反;
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);
}
}
輸出函數(shù),輸出文件內(nèi)容
void?OutputFile(FILE?*fp)
{
char?ch;
while((ch=fgetc(fp))!=EOF)
putchar(ch);
}
主函數(shù),主要調(diào)用這幾個(gè)函數(shù)
int?main()
{
/*用戶輸入的要加密的文件名*/
char?sfilename[20];
/*用戶輸入加密后保存的文件名*/
char?dfilename[20];
/*用來(lái)保存密碼字符*/
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();
/*屏幕以*來(lái)表示輸入的加密字符*/
printf("*\n");
/*以只讀方式打開(kāi)要加密的文件*/
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[]="輸入的帳號(hào)", pwd[]="輸入的密碼";
if (strcmp("真實(shí)帳號(hào)", user) == 0 strcmp("對(duì)應(yīng)密碼", pwd) == 0) {
printf("驗(yàn)證成功!");
} else {
printf("帳號(hào)或密碼錯(cuò)誤!");
}
這里使用的是按位加密,按ASCII碼進(jìn)行加密的算法自己寫(xiě)個(gè),很容易的。
#includestdio.h
#includestdlib.h
#includeconio.h
#includestring.h
void dofile(char *in_fname,char *pwd,char *out_fname);/*對(duì)文件進(jìn)行加密的具體函數(shù)*/
void usage(char *name);
void main(int argc,char *argv[])/*定義main()函數(shù)的命令行參數(shù)*/
{
char in_fname[30];/*用戶輸入的要加密的文件名*/
char out_fname[30];
char pwd[10];/*用來(lái)保存密碼*/
if(argc!=4)
{/*容錯(cuò)處理*/
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("加密成功,解密請(qǐng)?jiān)俅芜\(yùn)行程序\n");
}
else
{/*如果命令行參數(shù)正確,便直接運(yùn)行程序*/
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("加密成功,解密請(qǐng)?jiān)俅芜\(yùn)行程序\n");
}
}
/*加密子函數(shù)開(kāi)始*/
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);/*如果不能打開(kāi)要加密的文件,便退出程序*/
}
fp2=fopen(out_file,"wb");
if(fp2==NULL)
{
printf("cannot open or create out-file.\n");
exit(1);/*如果不能建立加密后的文件,便退出*/
}
/*加密算法開(kāi)始*/
while(j0=0)
{
ch=fgetc(fp1);
while(!feof(fp1))
{
fputc(ch^pwd[j=j0?j=0:j++],fp2);/*異或后寫(xiě)入fp2文件*/
ch=fgetc(fp1);
}
j0--;
}
fclose(fp1);/*關(guān)閉源文件*/
fclose(fp2);/*關(guān)閉目標(biāo)文件*/
}
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);
}
要?jiǎng)h除*號(hào)的話,稍微改一下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的話密碼可能差不多就這樣處理吧,當(dāng)然你的程式還需要改進(jìn)一下,比如如果輸入的超過(guò)數(shù)組的容量就skip掉,避免內(nèi)存溢出。還有對(duì)一些無(wú)效的字符比如箭頭按鍵,tab鍵等都skip掉,也就是限制合法字符的范圍。
#includestdio.h
#includeconio.h //用getch()函數(shù)時(shí)要的文件頭
#includestring.h
#define PWD "admin" //這里定義初始密碼
void main()
{
char pwd[16], ch;
int cnt=0, i=0;
while(cnt3) //3次機(jī)會(huì)輸入正確密碼
{
printf("please enter the password to continue:\n"); //輸出的字符應(yīng)該都在雙引號(hào)之內(nèi)
while((ch=getch())!=13i16) //用getch()來(lái)接收輸入字符
{
putchar('*'); //將輸入的密碼轉(zhuǎn)換成字符*
pwd[i]=ch;
i++;
}
pwd[i]=0;
if(!strcmp(PWD,pwd)) {//密碼正確則跳出循環(huán)并提示登錄成功
printf("\nlogin successful!\n");
break;
}
else
printf("\nincorrect password!\n");
cnt++;
}
}
網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言pwd函數(shù),c語(yǔ)言getcwd
轉(zhuǎn)載注明:http://chinadenli.net/article2/dsicdoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)