⑴ C語言字元串加密
問題不小,你表面用的是C
但是,好多地方不符合C的語法
,,比如:
for
(int
i=0;
str[i]
!=
'\0';
i++)
還有,就是你好像沒有弄清楚
,你要做什麼似的,有好多無用的東西,
就像你的函數里的,key
,雖然你提到key了,但是你根本沒有使用key,你只是使用45來進行加密,,還有就是一個文件
的大小,是不確定的,你用一個100個字元的字元串來存,有點那個不安全了,,如果稍長一點就會出問題,產生運行時錯誤。其實你這個加密和解密是一個可逆過程,用一個函數,就可以了,具體你想要的也不是太明白,就給你弄了一個簡單一點加密和解密程序
,輸入輸出不是同一個文件
,不知道是不是你想要的。
#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;
}
如果想看一些好一點的加密演算法
,我這里有一些,聯系我發給你
,,
⑵ C語言如何進行字元加密
進行字元加密是很多種的。
數據加密的基本過程就是對原來為明文的文件或數據按某種演算法進行處理,使其成為不可讀的一段代碼為「密文」,使其只能在輸入相應的密鑰之後才能顯示出原容,通過這樣的途徑來達到保護數據不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉化為其原來數據的過程。
⑶ C語言 字元串加密
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
intmain(void)
{
charc[100];
intk;
intlen,i,temp;
scanf("%s",c);
scanf("%d",&k);
len=(int)strlen(c);
k=k%26;
for(i=0;i<len;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;
}
}
elseif(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
{
/*donothing*/
}
}
printf("%s ",c);
return0;
}
⑷ C語言中最簡單的字元串加密解密問題!!!!希望大家幫幫忙,分不是問題 !!
加密解密的演算法都沒錯,錯的是解密程序里的文件操作方法。
rewind(fp)沒有必要。因為fp已經被close了。
一般不推薦同時對一個文件又讀又寫,因為這樣會導致很多緩沖區同步的問題。比如:
fputc()和getc()之間,必須要調用fflush(fp);
即使這樣,還是會有問題。比如回車,getc()可能會返回兩個字元,\n和\a。但是用fputc()寫入的時候,分別寫入\n和\a會把第二行第一個字元覆蓋掉。
正確的做法是:
先把解密的數據保存到字元串里,全部結束之後,一次性把解密完的字元串寫到文件里去。
void main()
{
char ch,name[30];
char content[1000];
int n = 0;
FILE *fp;
printf("name:\a");
gets(name);
fp = fopen(name,"r+");
if(fp==NULL)
{
printf("No file: %s!\n\a",name);
return;
}
ch = getc(fp);
while(ch!=EOF)
{
if((isalpha(ch))!=0)
{
if((ch >= 'a' && ch <= 'd') || (ch >= 'A' && ch <='D'))
ch = ch + 22;
else
ch = ch - 4;
}
content[n++] = ch;
ch = getc(fp);
//ch = getc(fp);
}
content[n] = 0;
rewind(fp);
fprintf(fp, "%s", content);
fclose(fp);
printf("%s ok\a\n",name);
printf("content: %s\n", content);
printf("\n");
}
⑸ C語言編程問題:從鍵盤上輸入一個字元串按照以下規則對其加密。
#include<stdio.h>
#include<string.h>
intmain(){
inti;
chars[80];
printf("請輸入字元串:");
while(scanf("%s",s)==1)
{
printf("加密前:%s ",s);
i=0;//i定義在此處便於第二次運行
while(s[i])
{if(s[i]>='A'&&s[i]<='Z')
s[i]=(s[i]-'A'+3)%26+'A';
elseif(s[i]>='a'&&s[i]<='z')
s[i]=(s[i]-'a'+3)%26+'a';
++i;}
printf("加密後:%s ",s);
printf("請輸入字元串[<Ctrl+Z><ENTER>結束程序]:");
}
return0;
}
⑹ C語言 簡單對字母進行加密
1、在我們的編輯頁面輸入以下代碼。
⑺ [高分]C語言對字元串的加密和解密
char
ch,name[30],over;
FILE
*fp;
printf("請輸入要加密的文件名(正確的做法是:先把解密的數不知道,你想要什麼樣的加密演算法。
AES不錯。不過AES是對16個位元組長度加密,要是不是16的倍數,處理有點麻煩據保存到字元串里,全部結束之後,一次性把解密
⑻ C語言設計一個簡單的加密解密程序
C語言設計一個簡單的加密解密程序如下:
加密程序代碼:
#include<stdio.h>
main()
{
char c,filename[20];
FILE *fp1,*fp2;
printf("請輸入待加密的文件名:\n");
scanf("%s",filename);
fp1=fopen(filename,"r");
fp2=fopen("miwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=c-32;
c=126-c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
解密程序代碼:
#include<stdio.h>
#include<string.h>
main()
{
char c,filename[20];
char yanzhengma[20];
FILE *fp1,*fp2;
printf("請輸入待解密文件名:\n");
scanf("%s",filename);
printf("請輸入驗證碼:\n");
scanf("%s",yanzhengma);
if(strcmp(yanzhengma,"shan")==0)
{
fp1=fopen(filename,"r");
fp2=fopen("yuanwen.txt","w");
do
{
c=fgetc(fp1);
if(c>=32&&c<=126)
{
c=126-c;
c=32+c;
}
if(c!=-1)
fprintf(fp2,"%c",c);
}
while(c!=-1);
}
else
{
printf("驗證碼錯誤!請重新輸入:\n");
scanf("%s",filename);
}
}
⑼ C語言字元串按要求加密 求教
1 子函數的修改。只要減掉24 即可,其餘語句多餘。
void encryp(char *plain,char *cipher)
{
int temp;
while(*plain!='\0')
{
temp=*plain-24;
*cipher=temp;
plain++;
cipher++;
}
*cipher='\0';
}
2 對輸出句的修改。改為按數字格式(知識點)輸出即可。
{ int i=0; // 增加一變數 i =0;
。。。。。。。。
while(ch2[i]!='\0')
printf("%d",ch2[i++]);
return 0;
}
⑽ C語言怎麼加密字元
#include<stdio.h>
#include<string.h>
intmain()
{
charstr[]="00000",str2[]="00000",*p=str,*p2=str2;
printf("輸入5個字母:");
while(*p!=0)
{
scanf("%c",p);
if(*p=='
')
continue;
if(*p<'A'||(*p>'Z'&&*p<'a')||*p>'z')//輸入驗證,必須是字母
{
printf("只能輸入字母,請重新輸入
");
p=str;
p2=str2;
fflush(stdin);//輸入有錯重新輸入前清空緩沖區。fflush屬於c擴展函數,正常使用沒問題,如需在linuxggc上使用,考慮多次調用getchar函數來清空
}
else
{
*p2=(*p)+4;
if(*p2>90&&*p2<97)//大寫字母加4,最大位不超出
*p2='A'+(*p2-90)-1;
if(*p2>122)//小寫字母加4,最大位不超出
*p2='a'+(*p2-122)-1;
p2++;
p++;
}
}
printf("原字元串為:%s
加密後的字元串為:%s
",str,str2);
return0;
}