密码学课程设计.docx

上传人:b****2 文档编号:671972 上传时间:2023-04-29 格式:DOCX 页数:16 大小:93.82KB
下载 相关 举报
密码学课程设计.docx_第1页
第1页 / 共16页
密码学课程设计.docx_第2页
第2页 / 共16页
密码学课程设计.docx_第3页
第3页 / 共16页
密码学课程设计.docx_第4页
第4页 / 共16页
密码学课程设计.docx_第5页
第5页 / 共16页
密码学课程设计.docx_第6页
第6页 / 共16页
密码学课程设计.docx_第7页
第7页 / 共16页
密码学课程设计.docx_第8页
第8页 / 共16页
密码学课程设计.docx_第9页
第9页 / 共16页
密码学课程设计.docx_第10页
第10页 / 共16页
密码学课程设计.docx_第11页
第11页 / 共16页
密码学课程设计.docx_第12页
第12页 / 共16页
密码学课程设计.docx_第13页
第13页 / 共16页
密码学课程设计.docx_第14页
第14页 / 共16页
密码学课程设计.docx_第15页
第15页 / 共16页
密码学课程设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

密码学课程设计.docx

《密码学课程设计.docx》由会员分享,可在线阅读,更多相关《密码学课程设计.docx(16页珍藏版)》请在冰点文库上搜索。

密码学课程设计.docx

密码学课程设计

 

课程设计说明书NO.1

数字签名

1、课程设计的目的

《密码学》是计算机科学与技术(信息安全)专业学生的基础必修课。

本课程设计是在学生完成相关课程和理论之后,通过综合训练培养学生的实际分析问题、解决问题的能力,帮助学生从感性认识再到理性认识,最后达到质的飞跃,系统掌握密码学课程的主要内容,更好地完成教学任务。

为了加深对密码学基本思想方法的理解和提高学生对密码学基本算法的具体应用技术,本课程设计设置了一周的课程设计。

通过本课程设计,使学生掌握密码学基本的加密和解密的一般步骤及方法,掌握密码学应用于实际的基本技术,为今后的专业应用打下良好的基础。

2.设计方案论证

当前全球电子互连互通的时代,由于计算机病毒。

黑客、电子窃听和电子欺诈,是的信息安全性在任何时候都十分重要。

密码学可以保护网络数据和资源不被泄漏,步骤数据和消息的真实性,保护系统不受基于网络的攻击。

利用成熟的密码学技术可以开发出应用软件来加强网络的安全。

在本课程的课程设计过程中,通过让每个学生完成1个具体题目,使学生学会把具体的加密解密算法作成简易的应用软件,从而今后可以利用计算机解决繁杂的实际问题,为后续课的学习和毕业设计奠定良好的基础。

布置具有一定难度的算法题目,帮助学生熟悉加密解密方法,并且能够用所学知识——程序设计语言编写出来,及时查究错误。

(1)要求学生达到熟练应用C语言的基本知识和C语言调试技能;

(2)掌握用C语言开发一般加密解密应用程序的一般步骤和方法;

(3)能够利用所学的密码学基本知识和技能,独立完成一个较为综合应用程序的开发,提高学生分析问题和解决问题的能力。

每位同学的课程设计报告必需独立完成。

具体要求:

若干名学生分成一组,在教师的指导下,每组完成一个题目。

题目可由教师指定或学生自选。

该组每个同学承担题目的不同部分,每位同学的课程设计报告必需独立完成。

设计要求如下:

课程设计说明书NO.2

(1)明确题目要求,进行需求分析,深入理解相应的算法思想。

(2)进行功能设计,编写设计说明

(3)进行程序设计与调试

(4)对设计过程进行系统的总结

2.1.一个简易的数字签名系统的实现

设计要求:

该系统要求能够使用散列函数算法对消息生成消息摘要,然后使用一种公钥算法对消息摘要实现签名。

设计步骤:

(1)建立一个基于C的应用程序。

(2)通过屏幕菜单方式选择需要完成的任务。

设计方法:

应用所学散列函数的基本原理和公钥密码的基本理论知识,使用C语言实现设计要求。

2.2.单向散列函数是消息认证码的一种变形

又叫Hash函数,哈希函数和杂凑函数。

把任意长的消息“压缩”成固定长消息的函数。

数字签名时,常被使用。

通常,HASH函数是公开的。

一般认为,Hash函数的输出为64位太小,应为128位以上,一般应为160位~190位。

2.3.RSA

计算模数n=pq,ø(n)=(p-1)(q-1)

选择一个随机加密密钥e,使e满足:

0

用欧几里德扩展算法计算解密密钥d,使d满足:

e×d=1modø(n)且0<=d<=n

即d=e-1modø(n)

课程设计说明书NO.3

公开加密密钥(公钥):

{e,n}

保存其解密密钥(私钥):

{d,p,q}

需要选择足够大的素数p,q

通常选择小的加密指数e,且与ø(n)互素

e对所有用户可以是相同的

最初建议使用e=3现在看3太小

常使用e=216+1=65537

解密指数d比较大

要加密消息M,首先把明文数字化,并把明文进行分组(每个组的数字小于n)。

发送者要得到接收者的公钥{e,n}。

发送者计算密文:

C=Memodn,其中0<=M

接收者为解密密文C,使用私钥{d,p,q}。

接收者计算:

M=Cdmodn

加密明文:

publickeyencryptions

明文转化为一个十进制数:

a

b

c

d

e

f

g

h

i

j

k

l

m

0

1

2

3

4

5

6

7

8

9

10

11

12

n

o

p

q

r

s

t

u

v

w

x

y

z

13

14

15

16

17

18

19

20

21

22

23

24

25

表1字母表

课程设计说明书NO.4

m’=1520011108021004240413021724151908141318

由于每四个数字一组,且每组都小于n=2537

可作为明文M,分别计算C=Memodn

如:

C=Memodn=152013mod2537=0095

得到密文:

C=0095164814101299136513792333213217511289

MD5加密算法简单介绍,存在两种加密方式,单向加密和双向加密。

MD5CyptoServiceProvider类是.NET中System.Security.Cryptography名字空间的一个类,提供专门用于MD5单向数据加密的解决方法,也是本文中我们用来加密数据库中密码的类。

要加密的明文字符串...我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件、账号、密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目提供的信息或者服务,比如免费电子邮件、论坛、聊天等,都需要用户注册。

而对于电子商务网站,比如igo5等大型电子商务网站,用户需要购买商品,就一定需要详细而准确的注册,而这些信息,往往是用户很隐秘的信息,比如电话、电子邮件、地址等,所以,注册信息对于用户和网站都是很重要的资源,不能随意透露,更加不能存在安全上的隐患。

如果我们也设计一个需要用户注册的网站,根据现在的常用技术实现方法,可以在数据库中建立一个用于存放用户信息的表,这个表中至少包括用户账号字段:

UserAccount和用户密码字段:

Password,当然,实际应用中一个用户信息表不可能就只有这些信息,往往根据网站服务要求,会适当增加一些其它的信息,以方便网站提供更加完善的服务。

一般的,一个用户信息占用这个用户信息表的一行也就是一个数据记录,当用户登录或者提交资料的时候,程序将用户填写的信息与表中的信息对照,如果用户账号和密码都准确无误,那幺说明这个用户是合法用户,通过注册;反之,则是非法用户,不许通过。

课程设计说明书NO.5

MD5加密算法简单介绍

  在现阶段,我们一般认为存在两种加密方式,单向加密和双向加密。

双向加密是加密算法中最常用的,它将我们可以直接理解的明文数据加密为我们不可直接理解的密文数据,然后,在需要的时候,可以使用一定的算法将这些加密以后的密文解密为原来可以理解的明文。

双向加密适合于隐秘通讯,比如,我们在网上购物的时候,需要向网站提交信用卡密码,我们当然不希望我们的数据直接在网上明文传送,因为这样很可能被别的用户“偷听”,我们希望我们的信用卡密码是通过加密以后,再在网络传送,这样,网站接受到我们的数据以后,通过解密算法就可以得到准确的信用卡账号。

单向加密刚好相反,只能对数据进行加密,也就是说,没有办法对加密以后的数据进行解密。

可能我们立即就会想,这样的加密有什幺用处?

不能解密的加密算法有什幺作用呢?

在实际中的一个应用就是数据库中的用户信息加密,当用户创建一个新的账号或者密码,他的信息不是直接保存到数据库,而是经过一次加密以后再保存,这样,即使这些信息被泄露,也不能立即理解这些信息的真正含义。

MD5就是采用单向加密的加密算法,对于MD5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。

前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果我们加密特定的数据,得到的密文一定是相同的。

MD5CyptoServiceProvider类是.NET中System.Security.Cryptography名字空间的一个类,提供专门用于MD5单向数据加密的解决方法,也是本文中我们用来加密数据库中密码的类。

在真正进行数据加密之前,我们首先来了解MD5CyptoServiceProvider类中的主要方法:

ComputeHash,它将输入的明文数据数组使用MD5加密以后输出加密后的密文数据数组。

课程设计说明书NO.6

3.运行结果与分析

3.1.MD5算法模块的编译结果

图1MD5的编译

由于没有主函数,所以编译通过,但是运行无误

 

3.2.RSA算法模块的编译结果

课程设计说明书NO.7

图2RSA的编译

由于没有主函数,所以编译通过,但是运行无误

4.心得体会

通过这次课程设计使我们懂得了理论与实际相结合的重要性,学习书本知识是一回事而将它应用于实践中又是另一回事。

它需要更多的动脑筋和自学相关的各方面知识,搜集资料。

我还感受到做凡事一定要有耐心与恒心,只有敢于面对失败,才能在发现问题、分析问题与解决问题的过程中水平与能力得到提高。

而且注重细节的设置会达到事半功倍的效果,不经意的细节可能决定事情的成败,也会历练严谨的品质。

这会使你的一生受益!

 

课程设计说明书NO.8

5.参考文献

[1]谢宋和,甘勇.单片机模糊控制系统设计与应用实例[M].北京:

电子工业出版社,1999.5:

20-25

[2]潘新民,王燕芳.微型计算机控制技术[M],第2版.北京:

电子工业出版社,2003.4:

305-350

[3]范立南,谢子殿.单片机原理及应用教程[M].北京:

北京大学出版社,2006.1:

123-130

[4]NewmanWM,SbroullRF.PrinciplesofInteractiveComputerGraphics[M].NewYork:

McGrawHill,1979.10:

10-25

[5]卜小明,龙全求.一种薄板弯曲问题的四边形位移单元[J].力学学报,1991,23

(1):

53-60

课程设计说明书NO.9

6.程序附录

publicclassMD5{

Stringhex_chr="0123456789abcdef";

privateStringrhex(intnum){

Stringstr="";

for(intj=0;j<=3;j++)

str=str+hex_chr.charAt((num>>(j*8+4))&0x0F)+hex_chr.charAt((num>>(j*8))&0x0F);

returnstr;

}

privateint[]str2blks_MD5(Stringstr){

intnblk=((str.length()+8)>>6)+1;

int[]blks=newint[nblk*16];

inti=0;

for(i=0;i

blks[i]=0;

}

for(i=0;i

blks[i>>2]|=str.charAt(i)<<((i%4)*8);

}

blks[i>>2]|=0x80<<((i%4)*8);

blks[nblk*16-2]=str.length()*8;

returnblks;

}

privateintadd(intx,inty){

return((x&0x7FFFFFFF)+(y&0x7FFFFFFF))^(x&0x80000000)^(y&0x80000000);

}

课程设计说明书NO.10

publicStringcalcMD5(Stringstr){

int[]x=str2blks_MD5(str);

inta=0x67452301;

intb=0xEFCDAB89;

intc=0x98BADCFE;

intd=0x10325476;

for(inti=0;i

intolda=a;

intoldb=b;

intoldc=c;

intoldd=d;

a=ff(a,b,c,d,x[i+0],7,0xD76AA478);

d=ff(d,a,b,c,x[i+1],12,0xE8C7B756);

c=ff(c,d,a,b,x[i+2],17,0x242070DB);

b=ff(b,c,d,a,x[i+3],22,0xC1BDCEEE);

a=ff(a,b,c,d,x[i+4],7,0xF57C0FAF);

d=ff(d,a,b,c,x[i+5],12,0x4787C62A);

c=ff(c,d,a,b,x[i+6],17,0xA8304613);

b=ff(b,c,d,a,x[i+7],22,0xFD469501);

a=ff(a,b,c,d,x[i+8],7,0x698098D8);

d=ff(d,a,b,c,x[i+9],12,0x8B44F7AF);

c=ff(c,d,a,b,x[i+10],17,0xFFFF5BB1);

b=ff(b,c,d,a,x[i+11],22,0x895CD7BE);

a=ff(a,b,c,d,x[i+12],7,0x6B901122);

d=ff(d,a,b,c,x[i+13],12,0xFD987193);

c=ff(c,d,a,b,x[i+14],17,0xA679438E);

b=ff(b,c,d,a,x[i+15],22,0x49B40821);

课程设计说明书NO.11

a=gg(a,b,c,d,x[i+1],5,0xF61E2562);

d=gg(d,a,b,c,x[i+6],9,0xC040B340);

c=gg(c,d,a,b,x[i+11],14,0x265E5A51);

b=gg(b,c,d,a,x[i+0],20,0xE9B6C7AA);

a=gg(a,b,c,d,x[i+5],5,0xD62F105D);

d=gg(d,a,b,c,x[i+10],9,0x02441453);

c=gg(c,d,a,b,x[i+15],14,0xD8A1E681);

b=gg(b,c,d,a,x[i+4],20,0xE7D3FBC8);

a=gg(a,b,c,d,x[i+9],5,0x21E1CDE6);

d=gg(d,a,b,c,x[i+14],9,0xC33707D6);

c=gg(c,d,a,b,x[i+3],14,0xF4D50D87);

b=gg(b,c,d,a,x[i+8],20,0x455A14ED);

a=gg(a,b,c,d,x[i+13],5,0xA9E3E905);

d=gg(d,a,b,c,x[i+2],9,0xFCEFA3F8);

c=gg(c,d,a,b,x[i+7],14,0x676F02D9);

b=gg(b,c,d,a,x[i+12],20,0x8D2A4C8A);

a=hh(a,b,c,d,x[i+5],4,0xFFFA3942);

d=hh(d,a,b,c,x[i+8],11,0x8771F681);

c=hh(c,d,a,b,x[i+11],16,0x6D9D6122);

b=hh(b,c,d,a,x[i+14],23,0xFDE5380C);

a=hh(a,b,c,d,x[i+1],4,0xA4BEEA44);

d=hh(d,a,b,c,x[i+4],11,0x4BDECFA9);

c=hh(c,d,a,b,x[i+7],16,0xF6BB4B60);

b=hh(b,c,d,a,x[i+10],23,0xBEBFBC70);

a=hh(a,b,c,d,x[i+13],4,0x289B7EC6);

课程设计说明书NO.12

d=hh(d,a,b,c,x[i+0],11,0xEAA127FA);

c=hh(c,d,a,b,x[i+3],16,0xD4EF3085);

b=hh(b,c,d,a,x[i+6],23,0x04881D05);

a=hh(a,b,c,d,x[i+9],4,0xD9D4D039);

d=hh(d,a,b,c,x[i+12],11,0xE6DB99E5);

c=hh(c,d,a,b,x[i+15],16,0x1FA27CF8);

b=hh(b,c,d,a,x[i+2],23,0xC4AC5665);

a=ii(a,b,c,d,x[i+0],6,0xF4292244);

d=ii(d,a,b,c,x[i+7],10,0x432AFF97);

c=ii(c,d,a,b,x[i+14],15,0xAB9423A7);

b=ii(b,c,d,a,x[i+5],21,0xFC93A039);

a=ii(a,b,c,d,x[i+12],6,0x655B59C3);

d=ii(d,a,b,c,x[i+3],10,0x8F0CCC92);

c=ii(c,d,a,b,x[i+10],15,0xFFEFF47D);

b=ii(b,c,d,a,x[i+1],21,0x85845DD1);

a=ii(a,b,c,d,x[i+8],6,0x6FA87E4F);

d=ii(d,a,b,c,x[i+15],10,0xFE2CE6E0);

c=ii(c,d,a,b,x[i+6],15,0xA3014314);

b=ii(b,c,d,a,x[i+13],21,0x4E0811A1);

a=ii(a,b,c,d,x[i+4],6,0xF7537E82);

d=ii(d,a,b,c,x[i+11],10,0xBD3AF235);

c=ii(c,d,a,b,x[i+2],15,0x2AD7D2BB);

b=ii(b,c,d,a,x[i+9],21,0xEB86D391);

a=add(a,olda);

b=add(b,oldb);

课程设计说明书NO.13

c=add(c,oldc);

d=add(d,oldd);

}

returnrhex(a)+rhex(b)+rhex(c)+rhex(d);

}

}

importjava.math.BigInteger;

publicclassRSA{

privatelongp,q,e,d,n;

publicRSA(){

intpIndex=(int)(Math.random()*10);

intqIndex;

inteIndex;

do{

qIndex=(int)(Math.random()*10);

}while(qIndex==pIndex);

do{

eIndex=(int)(Math.random()*10);

}while(eIndex==pIndex||eIndex==pIndex);

p=1033;

q=2017;

e=29437;

n=p*q;

d=calculateD();

}

课程设计说明书NO.14

privatelongcalculateD(){

longt0=0,t1=1,t2=-1;

longr0=(p-1)*(q-1),m=r0,r1=e,r2=-1;

do{

longq=r0/r1;

r2=r0-r1*q;

if(r2==0)

break;

t2=t0-t1*q;

while(t2<0){

t2=m;

}

if(t2>=m){

t2%=m;

}

r0=r1;

r1=r2;

t0=t1;

t1=t2;

}while(r2!

=0);

if(r1!

=1){

return0;

}else{

returnt2;

}

}

课程设计说明书NO.15

publiclonggetE(){

returne;

}

publiclonggetN(){

returnn;

}

publiclong

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

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2