收藏 分享(赏)

凯撒密码--C语言实现.doc

上传人:j35w19 文档编号:6543897 上传时间:2019-04-16 格式:DOC 页数:8 大小:50.50KB
下载 相关 举报
凯撒密码--C语言实现.doc_第1页
第1页 / 共8页
凯撒密码--C语言实现.doc_第2页
第2页 / 共8页
凯撒密码--C语言实现.doc_第3页
第3页 / 共8页
凯撒密码--C语言实现.doc_第4页
第4页 / 共8页
凯撒密码--C语言实现.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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); /*解密输出*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报