這里使用的是按位加密,按ASCII碼進(jìn)行加密的算法自己寫個(gè),很容易的。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了城西免費(fèi)建站歡迎大家使用!
#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];/*用來保存密碼*/
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ù)開始*/
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);/*關(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);
}
void encryp(char *plain,char *cipher)這個(gè)函數(shù)你寫復(fù)雜了,如下就可以了——
void encryp(char *plain,char *cipher){
int i;
for(i=0;plain[i];i++)
cipher[i]=plain[i]-24;
cipher[i]='\0';
}
這樣加密就完結(jié)了。
C語言設(shè)計(jì)一個(gè)簡(jiǎn)單的加密解密程序如下:
加密程序代碼:
#includestdio.h
main()
{
char
c,filename[20];
FILE
*fp1,*fp2;
printf("請(qǐng)輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#includestdio.h
#includestring.h
main()
{
char
c,filename[20];
char
yanzhengma[20];
FILE
*fp1,*fp2;
printf("請(qǐng)輸入待解密文件名:\n");
scanf("%s",filename);
printf("請(qǐng)輸入驗(yàn)證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c=32c=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗(yàn)證碼錯(cuò)誤!請(qǐng)重新輸入:\n");
scanf("%s",filename);
}
}
這里采用加密函數(shù)是:
如果是數(shù)組,則不進(jìn)行加密;
如果是字符,首先將a變成b,b變c,....依次類推,
然后再與加密字符異或
方法/步驟
首先打開VC++6.0
選擇文件,新建
選擇C++ source file 新建一個(gè)空白文檔
聲明頭文件
#includestdio.h
#includestdlib.h
#includestring.h
首先寫個(gè)加密函數(shù),算法就是簡(jiǎn)介里說的
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);
}
}
寫解密子函數(shù):與加密的過程相反
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];
/*用來保存密碼字符*/
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
void main()
{
int a[5]; /* 存儲(chǔ)各位上的數(shù)字 */
int num, temp, encripy; /* num是要輸入的數(shù),temp是交換時(shí)用來存儲(chǔ)臨時(shí)值,encripy是加密后的數(shù)據(jù) */
int i;
do
{
printf("Please input the number:");
scanf("%d",num);
if(!(num/10000 !=0 num/100000==0))
printf("Data error!\n");
}while(!(num/10000 !=0 num/100000==0));
a[0] = num/10000%10; /* 求各位上的數(shù)字 */
a[1] = num/1000%10;
a[2] = num/100%10; /* 百位上的數(shù)字 */
a[3] = num/10%10; /* 十位上的數(shù)字 */
a[4] = num%10; /* 個(gè)位上的數(shù)字 */
for(i = 0; i 5; ++i) /* 開始加密 */
a[i] = (a[i] + 8)%10;
temp = a[0]; /* 交換位置開始 */
a[0] = a[3];
a[3] = temp;
temp = a[1];
a[1] = a[2];
a[2] = temp; /* 交換位置結(jié)束同時(shí)加密結(jié)束 */
encripy = a[0]*10000 + a[1]*1000 + a[2]*100 + a[3]*10 + a[4]; /* 加密后的數(shù)據(jù) */
printf("\nThe scourse number: %d\n", num); /* 輸出原數(shù)據(jù) */
printf("\nEncripy the number: %d\n\n", encripy); /* 輸出加密后的數(shù)據(jù) */
}
在VC6.0成功運(yùn)行,希望對(duì)你有幫助!
C語言代碼和運(yùn)行結(jié)果如下:
輸出符合示例,加解密均正確,望采納~
附源碼鏈接:字符串加解密
當(dāng)前標(biāo)題:c語言子函數(shù)加密,c語言密文加密
文章來源:http://vcdvsql.cn/article38/hedhsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、ChatGPT、網(wǎng)站營(yíng)銷、服務(wù)器托管、建站公司、關(guān)鍵詞優(yōu)化
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)