Kaesar加密算法的應用實驗

/*
時間:2012年5月16日 18:58:44
功能:設a~z的編號爲1~26,空格爲27,採用Kaesar密碼方案,算法C=k1*P+k2,取k1=3,k2=5, 明文P=“Peking University”,計算密文C。 
*/

# include <stdio.h>

int k1 = 3;
int k2 = 5;
int P = 0;
int C = 0;
int I;

void OutPut(int);
int  InPut(int);

int main(void)
{
int a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10,k=11,l=12,m=13,n=14,o=15,p=16,q=17,r=18,s=19,t=20,u=21,v=22,w=23,x=24,y=25,z=26;
printf("A~Z/a~z的編號爲1~26:\n");
printf("A B C D E F G H I J  K  L  M  N  O  P   Q  R  S  T  U  V  W X  Y  Z\n");
printf("a b c d e f g h i j  k  l  m  n  o  p   q  r  s  t  u  v  w x  y  z\n");
printf("%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n\n",a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z);
char ch[18] = "Peking University"; //定義明文字符串
printf("算法:C=k1*P+k2,取k1=3,k2=5。\n\n");
printf("明文 P = “");
//打印明文字符串
for (I=0; I<17; I++)
{
printf("%c",ch[I]);
}
printf(" ”\n\n");
printf("密文 C =“");
//調用Post(ch[I])、OutPut(C),以及運算C值:C=k1*P+k2;
for(I=0; I<17; I++)
{
InPut(ch[I]);
C=k1*P+k2;
OutPut(C);
}
printf("”\n\n");
 
return 0;
}

//通過判斷字符來確定P的取值
int InPut(int ch)
{
if (ch<=90 && ch>=65)
{    //大寫字母
P = ch-64;
}
else if (ch<=122 && ch>=97)
{
P = ch - 96;
}
else 
{
P = -10;
}
return P;
}
 
//方法一:
/*
void OutPut(int C)
{
      printf("%c", (C + 96));                                //以小寫字母輸出
      //printf("%c", (C +64 ));                             //以大寫字母輸出
}
*/

//方法二:
//通過對C取餘數判斷出對應的密文字符
void OutPut(int C)
{
switch(C%26)
{
case 1:
printf("a");
break;
case 2:
printf("b");
break;
case 3:
printf("c");
break;
case 4:
printf("d");
break;
case 5:
printf("e");
break;
case 6:
printf("f");
break;
case 7:
printf("g");
break;
case 8:
printf("h");
break;
case 9:
printf("i");
break;
case 10:
printf("j");
break;
case 11:
printf("k");
break;
case 12:
printf("l");
break;
case 13:
printf("m");
break;
case 14:
printf("n");
break;
case 15:
printf("o");
break;
case 16:
printf("p");
break;
case 17:
printf("q");
break;
case 18:
printf("r");
break;
case 19:
printf("s");
break;
case 20:
printf("t");
break;
case 21:
printf("u");
break;
case 22:
printf("v");
break;
case 23:
printf("w");
break;
case 24:
printf("x");
break;
case 25:
printf("y");
break;
case 0:
printf("z"); //注:餘數爲0時,取z。
break;
default:
printf(" ");
break;
}
}

/*
結果:
--------------------------------------------------------------------
A~Z/a~z的編號爲1~26:
A B C D E F G H I J  K  L  M  N  O  P   Q  R  S  T  U  V  W X  Y  Z
a b c d e f g h i j  k  l  m  n  o  p   q  r  s  t  u  v  w x  y  z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

算法:C=k1*P+k2,取k1=3,k2=5。

明文 P = “Peking University ”

密文 C =“atlfuz pufstgjfmb”

Press any key to continue
--------------------------------------------------------------------
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章