C語言代碼和運(yùn)行結(jié)果如下:
翔安網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
輸出符合示例,加解密均正確,望采納~
附源碼鏈接:字符串加解密
問題不小,你表面用的是C
但是,好多地方不符合C的語法
,,比如:
for
(int
i=0;
str[i]
!=
'\0';
i++)
還有,就是你好像沒有弄清楚
,你要做什么似的,有好多無用的東西,
就像你的函數(shù)里的,key
,雖然你提到key了,但是你根本沒有使用key,你只是使用45來進(jìn)行加密,,還有就是一個(gè)文件
的大小,是不確定的,你用一個(gè)100個(gè)字符的字符串來存,有點(diǎn)那個(gè)不安全了,,如果稍長一點(diǎn)就會(huì)出問題,產(chǎn)生運(yùn)行時(shí)錯(cuò)誤。其實(shí)你這個(gè)加密和解密是一個(gè)可逆過程,用一個(gè)函數(shù),就可以了,具體你想要的也不是太明白,就給你弄了一個(gè)簡單一點(diǎn)加密和解密程序
,輸入輸出不是同一個(gè)文件
,不知道是不是你想要的。
#include
#include
#include
void
Decrypt()
{
char
fname[FILENAME_MAX];
char
fname2[FILENAME_MAX];
FILE*
fp;
FILE*
fp1;
int
key;
char
c;
printf("輸入要加/解密文件的路徑:\n");
scanf("%s",
fname);
printf("請輸入密鑰:\n");
scanf("%d",key);
strcpy(fname2,fname);
strcat(fname2,".txt");
if(
(fp
=
fopen(fname,"r+"))
==
NULL)
{
printf("error");
exit(1);
}
if(
(fp1
=
fopen(fname2,"w+"))
==
NULL)
{
printf("error");
exit(1);
}
while(
(c
=
fgetc(fp))
!=
EOF)
{
c
=
c^key;
fputc(c,fp1);
}
fcloseall();
}
int
main()
{
Decrypt();
return
0;
}
如果想看一些好一點(diǎn)的加密算法
,我這里有一些,聯(lián)系我發(fā)給你
,,
#includestdio.h
#includestdlib.h
#includestring.h
int?main(void)
{
char?c[100];
int??k;
int??len,i,temp;
scanf("%s",c);
scanf("%d",k);
len?=?(int)strlen(c);
k?=?k%26;
for(i=0;ilen;i++)
{
if?(c[i]?=?'a'??c[i]?=?'z')
{
if(c[i]+k??'z')
{
temp?=?'z'-c[i];
temp?=?k?-?temp?-?1;
c[i]='a'+temp;
}
else
{
c[i]+=k;
}
}
else?if?(c[i]?=?'A'??c[i]?=?'Z')
{
if(c[i]+k??'Z')
{
temp?=?'Z'-c[i];
temp?=?k?-?temp?-?1;
c[i]='A'+temp;
}
else
{
c[i]+=k;
}
}
else
{
/*?do?nothing?*/
}
}
printf("%s\n",c);
return?0;
}