密码学课程设计Word下载.docx
- 文档编号:894234
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:16
- 大小:93.82KB
密码学课程设计Word下载.docx
《密码学课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《密码学课程设计Word下载.docx(16页珍藏版)》请在冰点文库上搜索。
应用所学散列函数的基本原理和公钥密码的基本理论知识,使用C语言实现设计要求。
2.2.单向散列函数是消息认证码的一种变形
又叫Hash函数,哈希函数和杂凑函数。
把任意长的消息“压缩”成固定长消息的函数。
数字签名时,常被使用。
通常,HASH函数是公开的。
一般认为,Hash函数的输出为64位太小,应为128位以上,一般应为160位~190位。
2.3.RSA
计算模数n=pq,ø
(n)=(p-1)(q-1)
选择一个随机加密密钥e,使e满足:
0<
e<
ø
(n),gcd(e,ø
(n))=1
用欧几里德扩展算法计算解密密钥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<
n
接收者为解密密文C,使用私钥{d,p,q}。
接收者计算:
M=Cdmodn
加密明文:
publickeyencryptions
明文转化为一个十进制数:
a
b
c
d
e
f
g
h
i
j
k
l
m
1
2
3
4
5
6
7
8
9
10
11
12
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类中的主要方法:
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<
nblk*16;
i++){
blks[i]=0;
for(i=0;
str.length();
blks[i>
2]|=str.charAt(i)<
<
((i%4)*8);
}
blks[i>
2]|=0x80<
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;
x.length;
i+=16){
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);
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;
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学 课程设计