1、凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx” ,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移 3 位,所得的结果就是刚才我们所看到的密文。/*凯撒密码实现要求,将明文字母变成它后面第三个字母,后面的循环到前面!公式为 f(a)=(f(a)+3)%26*/#include int main()char P100;/*定义明文长度 */char C
2、100;/*定义密文长度 */int K=3,i;printf(“Please input Plaintext:n“); /*输入明文*/gets(P); /* 接受明文*/for(i=0;Pi!=0;i+) /*逐个判断字母的大小*/if(Pi=aprintf(“n=“);printf(“n1.Encrypt the file“);printf(“n2.Decrypt the file“);printf(“n3.Quitn“);printf(“=n“);printf(“Please select a item:“);return;char encrypt(char ch,int n)/*加密
3、函数,把字符向右循环移位 n*/while(ch=A*(pwd+i)!=0;i+)if(*(pwd+i)=aelse *(pwd+i)=z-(key%26-(*(pwd+i)-a)-1;else if(*(pwd+i)=Aelse *(pwd+i)=Z-(key%26-(*(pwd+i)-A)-1;return pwd;void main()char *pwd;int key;pwd=(char*)malloc(sizeof(char);printf(“Input your password:“);gets(pwd);printf(“Input a key:“);scanf(“%d“,prin
4、tf(“The Ciphertext is:“);printf(“%sn“,Encrypt(pwd,key);-/*替换法:*/#include #include #include void table(char *keyword) /*筛选密钥(去重复去空格)*/int i,j,k;for(i=0;*(keyword+i)!=0;i+)for(j=i;*(keyword+j)!=0;j+)if(i!=j)if(*(keyword+i)=*(keyword+j)|*(keyword+j)= )for(k=j;*(keyword+k)!=0;k+)*(keyword+k)=*(keyword+k
5、+1);j-;void newTab(char *keyword) /*生成密钥表*/char ch;int i;int t;for(t=0;*(keyword+t)!=0;t+);for(ch=a;ch=z;ch+)for(i=0;*(keyword+i)!=ch;i+)if(*(keyword+i)=0)*(keyword+t)=ch;t+;break;*(keyword+t)=0;char *Ciphertext(char *keyword,char *Plaintext) /*按密码表加密*/char ch;int i,j;for(i=0;*(Plaintext+i)!=0;i+)fo
6、r(ch=a,j=0;ch=z;ch+,j+)if(*(Plaintext+i)=ch)*(Plaintext+i)=*(keyword+j);break;return Plaintext;char *Decrypt(char *keyword,char *Plaintext) /*解密*/char ch;int i,j;for(i=0;*(Plaintext+i)!=0;i+)for(ch=a,j=0;*(keyword+j)!=0;ch+,j+)if(*(Plaintext+i)=*(keyword+j)*(Plaintext+i)=ch;break;return Plaintext;vo
7、id main()char *keyword,*Plaintext,*tmp=NULL;keyword=(char*)malloc(sizeof(char);Plaintext=(char*)malloc(sizeof(char);printf(“Input key word:“); /*输入欲用密钥*/gets(keyword);printf(“Input Plaintext:“); /*输入要转换的明文*/gets(Plaintext);table(keyword); /*去空格去重复*/newTab(keyword); /*生成密码表 */tmp=Ciphertext(keyword,Plaintext); /*对应着密码表生成密文*/puts(tmp); /*输出密文*/puts(Decrypt(keyword,tmp); /*解密输出*/