c語言字元串密碼
char
ch,name[30],over;
FILE
*fp;
printf("請輸入要加密的文件名(正確的做法是:先把解密的數不知道,你想要什麼樣的加密演算法。
AES不錯。不過AES是對16個位元組長度加密,要是不是16的倍數,處理有點麻煩據保存到字元串里,全部結束之後,一次性把解密
Ⅱ C語言字元串加密問題
樓主,你的問題在於沒有對數組 r 初始化(而s的輸出沒有問題),這樣輸出的時候找不到結束符,所以就一直輸出下去,因此出現了亂碼。
提出兩種修改方法,這兩種方法都可以避免你的問題:
1、char r[10000]={0}; 後就可以了。這樣你輸入的字元串不管是多長,到時後面的都是結束符。
2、上面不對r進行初始化,而修改下面
for(i=0;s[i]!='\0';i++)
{
if((s[i]<='Z')&&(s[i]>='A'))
r[i]=s[i]+3;
else if((s[i]<='z')&&(s[i]>='a'))
r[i]=s[i]-4;
else
r[i]=s[i];
}
r[i]='\0'; //在r的後面加上結束符就可以了
Ⅲ 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語言對字元串加密
沒看懂是什麼意思?輸出的是後幾位的字母及數字,到底輸出多少?加密演算法是什麼??
Ⅳ c語言 字元的加密
在加密的時候,加入超過Z ,你就去取余數(ASII碼) ,但是在解密的時候,你減去加密數字,可能會小余A的(ASII),加個判斷,小於0就加上A的(ASII)。具體實現方法你就自己去編程。我提供了思路。
Ⅵ c語言密碼
用什麼替換?
暫時用小寫加移位取?比如A加密成c,B加密成d,就是大寫變小寫後位置發生變化。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void EncodeString(char *str,int key)
{
int length,i;//length為傳入字元串長度,i用作循環計數器
length=strlen(str);
for(i=0;i<length;i++)//對字元串中的每個字元依次進行加密
{
if(isupper(str[i]))//對大寫字母加密
{
str[i]+=key%26;
if(str[i]>'Z')
{
str[i]-=26;
}
else if(str[i]<'A')
{
str[i]+=26;
}
}
else if(islower(str[i]))//對小寫字母加密
{
if(str[i]+key%26<128){
str[i]+=key%26;
if(str[i]>'z')
{
str[i]-=26;
}
else if(str[i]<'a')
{
str[i]+=26;
}
}
else{str[i]-=26;str[i]+=key%26;}
}
}
}
void main()
{
char arr[50],buffer;//arr[50]用來接收字元串信息,buffer用來接收緩沖區中的回車
int key;//key為加密秘鑰
printf("This program encodes messages using a cyclic cipher.
");
printf("To stop, enter 0 as the key.
");
while(1)//程序一直運行,直到輸入密鑰0為止
{
printf("Enter the key: ");
scanf("%d",&key);
scanf("%c",&buffer);
if(0==key)
{
break;//輸入密鑰為0,則退出程序
}
printf("Enter a message: ");
scanf("%s",arr);
scanf("%c",&buffer);
EncodeString(arr,key);
printf("Encoded message: %s
",arr);
}
}
Ⅶ c語言,字元串密碼登錄程序
這樣修改,是否符合原來的題意?
Ⅷ 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語言字元串加密
'Z' 對應的ascii值為90
'A'對應的ascii值為65
若s1[1]為 'a' 則對應的ascii值為97
那麼算出來s2='Z'-(s1[i]-'A')+A-1 = 90 -(97-65)+65-1=122
『z』對應的ascii值為122 所以這個時候的s2為 z
Ⅹ c語言編寫:將用戶輸入的字元串翻譯成密碼串:規則如下
a b c d e f g h i j
例子里輸入ab,cd
a是第1個字元,那麼換成a後面第1個,也就是b
b是第2個字元,那麼換成b後面第2個,也就是d
到這里都沒錯
c是第4個字元,那麼換成後面第4個,也就是g,為什麼題目示例是h???
#include <stdio.h>
#include <ctype.h>
int main()
{
int i=0;
char str[1001];
fgets(str,1000,stdin);
while(str[i]){
if(islower(str[i]))
str[i]=97+(str[i]+i-96)%26;
else if(isupper(str[i]))
str[i]=65+(str[i]+i-64)%26;
i++;
}
puts(str);
return 0;
}