凯撒密码--C语言实现(共8页)_第1页
凯撒密码--C语言实现(共8页)_第2页
凯撒密码--C语言实现(共8页)_第3页
凯撒密码--C语言实现(共8页)_第4页
凯撒密码--C语言实现(共8页)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。/*凯撒密码实现 要求,将明文字母变成它后面第三个字母,后面的循环到前面! 公式为f(a)=(f(a)+3)%26*/#include <stdio.h>int main()

2、char P100;/*定义明文长度*/ char C100;/*定义密文长度*/ int K=3,i; printf("Please input Plaintext:n"); /*输入明文*/ gets(P); /* 接受明文*/ for(i=0;Pi!='0'i+) /*逐个判断字母的大小*/ if(Pi>='a'&&Pi<='z') /*小写字母 */ Ci=(Pi-'a'+K)%26+'a' else if(Pi>='A'&&am

3、p;Pi<='Z')/*大写字母 */ Ci=(Pi-'A'+K)%26+'A' else Ci=' '/*如果不是字母,转换为空格*/ printf("The Ciphertext is :n%sn",C);/*输出密文*/ getch(); return 0; 1、程序结构化,用函数分别实现2、对文件的加密,解密输出到文件#include<stdio.h>#include<conio.h>void menu()/*菜单,1.加密 2.解密 3.退出*/clrscr();prin

4、tf("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)/*加密函数,把字符向右循环移位n*/while(ch>='A'&&ch<='Z')r

5、eturn ('A'+(ch-'A'+n)%26);while(ch>='a'&&ch<='z')return ('a'+(ch-'a'+n)%26);return ch;main()int i,n;char ch0,ch1;FILE *in,*out;char infile10,outfile10;textbackground(RED);textcolor(LIGHTGREEN);clrscr();menu();ch0=getch();while(ch0!='3

6、')if(ch0='1') clrscr(); printf("nPlease input the infile:"); scanf("%s",infile);/*输入需要加密的文件名*/ if(in=fopen(infile,"r")=NULL) printf("Can not open the infile!n"); printf("Press any key to exit!n"); getch(); exit(0); printf("Please inp

7、ut the key:"); scanf("%d",&n);/*输入加密密码*/ printf("Please input the outfile:"); scanf("%s",outfile);/*输入加密后文件的文件名*/ if(out=fopen(outfile,"w")=NULL) printf("Can not open the outfile!n"); printf("Press any key to exit!n"); fclose(in);

8、getch(); exit(0); while(!feof(in)/*加密*/ fputc(encrypt(fgetc(in),n),out); printf("nEncrypt is over!n"); fclose(in); fclose(out); sleep(1);if(ch0='2') clrscr(); printf("nPlease input the infile:"); scanf("%s",infile);/*输入需要解密的文件名*/ if(in=fopen(infile,"r"

9、)=NULL) printf("Can not open the infile!n"); printf("Press any key to exit!n"); getch(); exit(0); printf("Please input the key:"); scanf("%d",&n);/*输入解密密码(可以为加密时候的密码)*/ n=26-n; printf("Please input the outfile:"); scanf("%s",outfile);/*

10、输入解密后文件的文件名*/ if(out=fopen(outfile,"w")=NULL) printf("Can not open the outfile!n"); printf("Press any key to exit!n"); fclose(in); getch(); exit(0); while(!feof(in) fputc(encrypt(fgetc(in),n),out); printf("nDecrypt is over!n"); fclose(in); fclose(out); sleep(1

11、);clrscr(); printf("nGood Bye!n");sleep(3); getch();-/*移位法:*/#include <stdio.h>#include <stdlib.h>char *Encrypt(char *pwd,int key) /*加密*/for(int i=0;*(pwd+i)!='0'i+)if(*(pwd+i)>='a'&&*(pwd+i)<='z')*(pwd+i)=(*(pwd+i)-'a'+key)%26+'

12、;a'else if(*(pwd+i)>='A'&&*(pwd+i)<='Z')*(pwd+i)=(*(pwd+i)-'A'+key)%26+'A'return pwd;char *Decrypt(char *pwd,int key) /*解密*/for(int i=0;*(pwd+i)!='0'i+)if(*(pwd+i)>='a'&&*(pwd+i)<='z')if(*(pwd+i)-'a'>=

13、key%26)*(pwd+i)=*(pwd+i)-key%26;else *(pwd+i)='z'-(key%26-(*(pwd+i)-'a')-1;else if(*(pwd+i)>='A'&&*(pwd+i)<='Z')if(*(pwd+i)-'A'>=key%26)*(pwd+i)=*(pwd+i)-key%26;else *(pwd+i)='Z'-(key%26-(*(pwd+i)-'A')-1;return pwd;void main()c

14、har *pwd;int key;pwd=(char*)malloc(sizeof(char);printf("Input your password:");gets(pwd);printf("Input a key:");scanf("%d",&key);printf("The Ciphertext is:");printf("%sn",Encrypt(pwd,key);-/*替换法:*/#include <stdio.h>#include <stdlib.h>

15、#include <string.h>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+1);j-;void newTab(char *keyw

16、ord) /*生成密钥表*/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;*(

17、Plaintext+i)!='0'i+)for(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;void main()char *keyword,*Plaintext,*tmp=NULL;keyword=(char*)malloc(sizeof(char);Plaintext=(char*)malloc(sizeof(char);printf(&quo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论