//方法二:
Kaesar加密算法的应用实验
原创
©著作权归作者所有:来自51CTO博客作者SINOTHK的原创作品,谢绝转载,否则将追究法律责任
/*
时间: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
--------------------------------------------------------------------
*/
上一篇:冒泡排序
下一篇:直接插入排序 —— 简单排序
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
对称加密算法实验 对称加密算法实验总结
数学与统计学院《计算机网络》上机实验报告
对称加密算法实验 非对称加密 加密算法 对称加密