凯撒密码
明文创建函数
明文创建界面
linklist JAM_TXT(linklist head) //对明文进行加密 { linklist p,head1,q,f; int k; char c; q=new LNode; f=q; cout<<"请输入加密密钥(字母移动长度): "; cin>>k; p=head; while(p) { q->next=new LNode; q=q->next; q->data=new char[strlen(p->data)+1]; for(int i=0;p->data[i]!='\0';i++) { ………..……..} q->data[strlen(p->data)]='\0'; p=p->next; } q->next=NULL; head1=f->next; return head1; }
主函数
主界面
linklist CreateTXT() //创建明文 { linklist p,head; char temp[80]; int i,N; p=new LNode; p->data=NULL; p->next=NULL; head=p; for(i=0;i<N;i++) { gets(temp); //以回车键作为行结束标志,却不接收最后一个回车键 p->next=new LNode; p=p->next; p->data=new char[strlen(temp)+1]; //申请字符串大小的空间(比字 符串大1,用于存放字符串结束标识符) strcpy(p->data,temp); p->data[strlen(temp)]='\0'; } p->next=NULL; head=head->next; return head;
各模块及函数调用之间的关系
主函数 文 本 创 建 函 数
加 密 文 本 函 数
解 密 文 本 函 数
文 章 输 出 函 数
数据结构设计
行结点定义
typedef struct LNode { char *data; LNode *next; }LNode,*linklist;
加密界面
ቤተ መጻሕፍቲ ባይዱ
linklist JEM_TXT(linklist head) //对密文进行解密 { linklist p,head1,q,f; char c,a; int k; q=new LNode; f=q; cout<<"请输入解密密钥(字母移动长度)"; cin>>k; p=head; while(p) { q->next=new LNode; q=q->next; q->data=new char[strlen(p->data)+1]; for(int i=0;p->data[i]!='\0';i++) {………………………} q->data[strlen(p->data)]='\0'; p=p->next; } q->next=NULL; head1=f->next; p=head1; cout<<"当k为"<<k<<"时,明文被解密为:"<<endl; while(p) { for(int i=0;p->data[i]!='\0';i++) cout<<p->data[i]; p=p->next; } return head1; }
解密界面
输出文章函数
void out_TXT(linklist head) //输出文章 { linklist p; p=head; cout<<"文章信息为:"; while(p) { for(int i=0;p->data[i]!='\0';i++) cout<<p->data[i]; cout<<endl; p=p->next; } }
void main() { int flag=1,a; linklist head,head_jam,head_jem; cout<<"1.创建明文 2.输出明文 3.加密明文"<<endl; cout<<"4.输出密文 5.解密密文 6.输出最后一次解密后得到的明文 7.退出 "<<endl; while(flag) { cout<<"请选择您要进行的操作:"; cin>>a; switch(a) { case 1:head=CreateTXT();break; case 2:out_TXT(head);break; case 3:head_jam=JAM_TXT(head);break; case 4:out_TXT(head_jam);break; case 5:head_jem=JEM_TXT(head_jam);break; case 6:out_TXT(head_jem);break; case 7:flag=0;break; default:cout<<"您的选择有误"<<endl; } } }
解密函数
解密方法
for(int i=0;p->data[i]!='\0';i++) { if(p->data[i]>='A'&&p->data[i]<='Z') { c=p->data[i]; c=(c-65-k+26)%26+65; q->data[i]=c; } else q->data[i]=p->data[i]; } q->data[strlen(p->data)]='\0';
加密函数
加密方法
for(int i=0;p->data[i]!='\0';i++) { if(p->data[i]>='A'&&p->data[i]<='Z') { c=p->data[i]; c=(c-65+k)%26+65; q->data[i]=c; } else if(p->data[i]>='a'&&p->data[i]<='z') { c=p->data[i]; c=(c-97+k)%26+65; q->data[i]=c; } else q->data[i]=p->data[i]; }