密码学课程设计大纲

《密码学》课程设计教学大纲

课程编号:089233  设计周数:3 周    学分数:3  应开学期:5

       

一、课程设计的目的

通过本课程实验,使学生能运用应用密码学的基本概念、基本原理、协议和技术,阐释一般安全网络环境中密码产品如何利用密码学理论工作的原理,分析密码技术的实现过程和方法。

二、适用专业

信息安全专业、以及与信息安全相关的数学系信息专业、通信专业和计算机专业等。

三、课程设计的基本要求

要求实验者有较强的理论基础和动手编程能力。对于每一个实验都给出了实验目的﹑实验内容﹑预习要求(实验导读)﹑实验提示﹑实验作业。主张学生在做实验前,必须要充分预习,充分准备,要依靠自己在做实验之前要编出程序,经过实验调试改正程序,得出正确的结果。

四、课程设计的内容

密码实验共安排三个代表性的实验。在此基础之上,如果学生有余力可以研究具体的密码分析算法,如差分攻击,代数攻击等。进一步加深对密码算法的理解。

五、时间分配

六、成绩评定

实验单独考核,按预习、操作、纪律、实验报告综合评定成绩,按优、良、中、及格、不及格评定,教学结束后, 实验成绩不超过总成绩的30%。

七、说明

密码实验共安排三个代表性的实验。不论哪类实验,都不希望具体的实验步骤整齐划一和实验报告内容千篇一律。实验者应当尽可能发挥自己的潜能,写出有各自特色的实验报告。比如,要求有对程序的分析,要在描述一些基本功能的基础上,自行给出能够其余可行的思路。除此之外,还应自己探索更深入和优化的方法,探讨相关参数对性能的影响,据此加以总结列举在实验报告上。同时应该侧重写出自己在算法分析、设计思路、实现功能或程序代码等方面的特色,写出设计和实现过程中遭遇到的难点和解决办法,可以不拘泥于实验指导给出的参考性设计思路,尽可能在深度和广度上加以拓展。只有这种各具特色的实验报告,才将更有利于体现实验者在创新思维和动手能力上的差异。

制定者:李昕 

审定者:林果园 

批准者:周勇 

 

第二篇:密码学课程设计仿射密码

#include <iostream>

#include <string>

using namespace std;

char z[28][3]={"计","算","机","学","院","网","络","工","程","信","息","安","全",",","我","们","热","爱","中","华","人","民","共","和","国","。","大","家"};

int key[12]={1,3,5,9,11,13,15,17,19,23,25,27};

int gcd(int n,int m)

{

int r,temp;

if(n<m)

{temp=n;

n=m;

m=temp;

}

while(m!=0)

{r=n%m;

n=m;

m=r;

}

return n;

}

int niyuan(int a)

{

int b;

for(b=1;b<28;b++)

if((a*b)%28==1)

{

return b;

}

return -1;

}

class fangshe

{

public:

int k[2],kx;

char c[200],m[200];

void setkey()

{

cout<<"请输入仿射密码密钥的两部分:";

loop: cin>>k[0]>>k[1];

kx=niyuan(k[0]);

if(kx==-1)

{

cout<<"此密钥违法!请重新输入:"; goto loop; } } void setkey(int a,int b) { k[0]=a;k[1]=b; kx=niyuan(k[0]); } int* getkey() { return k; } void encryption(char m[],char c[]) { int i=strlen(m),kk=i/2,j; int mm[100],cc[100]; ctoi(m,mm); for(j=1;j<=kk;j++) cc[j]=(k[0]*mm[j]+k[1])%28; itoc(cc,c,kk); } void decryption(char c[],char m[]) { int i=strlen(c),kk=i/2,jj; int mm[100],cc[100]; ctoi(c,cc); for(jj=1;jj<=kk;jj++) { int zan=cc[jj]-k[1]; if(zan<0) zan=zan+28; mm[jj]=(kx*zan)%28; } itoc(mm,m,kk); } void ctoi(char m[],int mm[]) { int mi=0,ii=1,j; for(mi=0,ii=1;m[mi]!='\0';mi=mi+2,ii++) {

for(j=0;j<=27;j++)

if(m[mi]==z[j][0]&&m[mi+1]==z[j][1])

{

mm[ii]=j;

break;

}

}

}

void itoc(int cc[],char c[],int kk)

{

int i,ci=0;

for(ci=0,i=1;i<=kk;i++,ci=ci+2)

{

c[ci]=z[cc[i]][0];c[ci+1]=z[cc[i]][1];c[ci+2]='\0';

}

c[ci]='\0';

}

};

int main()

{

fangshe yunlong;

cout<<"

******************************************************************"<<endl;

cout<<" *** 欢迎使用云龙仿射加密系统 ***"<<endl;

cout<<" *** @ @@@@@@ @ ***"<<endl;

cout<<"

******************************************************************"<<endl;

cout<<" ************************注:密钥一只能从以下几个数字里选

择:********"<<endl;

cout<<" **************************";

int mimi;

for(mimi=0;mimi<=10;mimi++)

cout<<key[mimi]<<" ";

cout<<key[11]<<"*********"<<endl;

cout<<" **空间: 计算机学院网络工程信息安全,我们热爱中华人民共和国。大

家**"<<endl;

cout<<"

******************************************************************"<<endl;

while(1)

{

int cmd;

yl:

cout<<"请选择操作:1.加密信息 2.解密信息 3.破解信息"<<endl; cin>>cmd; if(cmd<1||cmd>3) { cout<<"输入有误!!!"<<endl; goto yl; } switch(cmd) { case 1: yunlong.setkey(); cout<<"请输入明文信息:";cin>>yunlong.m; yunlong.encryption(yunlong.m,yunlong.c); cout<<"密文为:"<<yunlong.c<<endl; break; case 2: yunlong.setkey(); cout<<"请输入密文信息:";cin>>yunlong.c; yunlong.decryption(yunlong.c,yunlong.m); cout<<"明文为:"<<yunlong.m<<endl; break; case 3: int a,b; int yes=0; cout<<"请输入密文信息:";cin>>yunlong.c; for(a=0;a<=11;a++) { for(b=0;b<=27;b++) { yunlong.setkey(key[a],b); yunlong.decryption(yunlong.c,yunlong.m); cout<<"密钥为:"; cout.width(4); cout<<"k1="; cout.width(4);cout<<key[a]; cout<<"k2="; cout.width(4);cout<<b; cout<<"明文为:"<<yunlong.m<<endl; // cout<<"该明文正确吗? 1.yes 0.no"<<endl; // cout<<"确认:";cin>>yes; // if(yes) // break; } if(yes) break;

} } break; } } return 0;

相关推荐