




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、指导教师姓名教研室信息与计算科学课程设计题目数字签名系统人数1学时2周设计目的、任务和要求设计目的:本课程设计力求为学生提供一个理论联系实际的机会。通过实践,建立密码学理论的整体思想,锻炼编写、调试程序的能力,学习文档编写规范,培养独立学习、吸取他人经验、探索前沿知识的习惯。同时,课程设计可以充分弥补课堂教学及普通实验中知识深度与广度有限的缺陷,更好地帮助学生从全局角度把握课程体系。设计任务:(1)在深入理解基于RSA/ElGamal的数字签名算法的基础上,设计数字签名系统;(2)要求输入信息(可以是汉字或英文,信息量要求不受限制),或者是文本文档。使用RSA/ElGamal算法进行数字签名,
2、RSA/ElGamal中模数n的长度不低于100比特。(3)提供良好地用户界面。(4)要求提供所设计系统的报告及完整的软件。设计的方法和步骤第一步:进行系统设计;第二步:代码编码;第三步:对实现部分的软件功能或者模块进行测试第四步:提交完整可执行软件,准备答辩;第五步:答辩,演示软件,教师根据实际情况提出测试用例,学生作最后的修改和完善,教师对软件运行部分进行评分;第六步:完成课程设计报告并提交。设计工作计划1. 本次课程设计的时间是2周,工作计划如下:2. 任务书下达,理解选题,明确软件功能,分析和设计:2天;3. 分析和设计报告的撰写:1天4. 实现部分设计及文档编写;1天;5. 编码及调
3、试:4天;6. 报告完善及打印:1天;7. 成果提交和验收:1天。主要参考资料1、 陈鲁生、沈世镒现代密码学(2) 北京:科学出版社,2008年2、 Michael Welschenbach编著,赵振江,连国卿等译,编码密码学加密方法的C与C+实现,电子工业出版社,2003年6月;3、 /教研室签字: 年 月 日学院签字: 年 月 日目录一、需求分析41.1设计背景41.2设计目的与意义41.3概述4二、系统设计52.1 系统主要目标52.2 系统运行环境52.3 功能模块与系统结构52.3.1 系统初始化52.3.2 签名变换52.3.3 签名验证
4、6三、详细设计73.1 系统初始化73.2 签名变换83.3 签名验证93.4数据处理10五、 软件测试164.1系统初始化164.2数据加密164.3数据解密164.4系统补充17六、 个人总结18一、需求分析1.1设计背景密码学是一门古老深奥的学科,长期以来,只在极少范围内使用,计算机密码学是研究信息加密解密及其变换的一门学科,是数学及计算机的交义学科,随着计算机网络和计算机通讯的发展,计算机密码学得到了前所未有的飞速发展,提高了各类型组织的管理水平和效率,促进了社会的发展,但是,计算机的保密也变得由其重要,我们需要一种措施保护数据的安全性,数字签名系统就是一种加密方法,极大地保护了数据的
5、安全。文章阐述了ElGamal数字签名算法的设计特色,详细介绍了ElGamal算法具体的签名验证的算法函数。此外,ElGamal数字签名与一般公钥密码体制签名的不同之处,是具有高安全性和实用性。我们根据算法的安全性、代价以及算法与实现特性的原则设计了ElGamal简单常用的数字签名系统。1.2设计目的与意义目的: 保密性:防止用户的标识或者信息被读取; 广泛性:对所有数据进行加密解密; 数据完整性:防止数据被更改,加密解密后不改变原数据。意义: 随着计算机的广泛应用,计算机信息保密问题越来越重要,密码技术是对数据进行保密的安全可靠的方法,有力得保护了个人隐私。1.3概述本系统使用ElGamal
6、数字签名算法进行加密解密。进入用户界面,随机生成秘钥,再输入需要加密的数据,最后进行解密进行数据测试。二、系统设计2.1 系统主要目标(1)在深入理解基于RSA/ElGamal的数字签名算法的基础上,设计数字签名系统;(2)要求输入信息(可以是汉字或英文,信息量要求不受限制),或者是文本文档。使用RSA/ElGamal算法进行数字签名,RSA/ElGamal中模数n的长度不低于100比特。(3)提供良好地用户界面。(4)要求提供所设计系统的报告及完整的软件。2.2 系统运行环境本软件使用VC语言编写测试平台:Windows XP Professional使用软件:Visual C+ 6.02.
7、3 功能模块与系统结构数字签名流程图主要功能模块如下:2.3.1 系统初始化(1)选取大素数 p,gZp*是一个本原元。 p、g和公开。(2)随机选取整数 b,且2bp2。计算:B=gb mod pB是公开的加密密钥, b是保密的解密密钥。2.3.2 签名变换对任意明文mZp*是待签名的消息。秘密随机选取一个整数a,1ap-2。对消息M的签名为Sigm(A,s)Zp*Zp-1其中A=ga mod ps=m-bAa-1 mod(p-1)签名验证流程图主要功能模块如下:2.3.3 签名验证对于mZp*,(A,s)Zp*Zp-1,如果BAAsgm (mod p)则确认(r,s)为消息m的有效签名。因
8、为s=m-bAa-1 mod(p-1)所以as+bAm (modp-1)因此,如果(r,s)Zp*Zp-1是消息mZp*的正确签名,则一定有BAAsgbAgas mod pgm (mod p)三、详细设计3.1 系统初始化主要代码:#include stdafx.h#include ELGamaltool.h#include ELGamaltoolDlg.h#include BigInt.h#include CCommon.h#include ELGmaltest1.hvoid CELGamaltoolDlg:OnBUTgenerate() AfxBeginThread(mmyproc,&m_
9、progress); CString caption; AfxGetMainWnd( )-GetWindowText(caption); AfxGetApp()-BeginWaitCursor(); AfxGetMainWnd( )-SetWindowText(正在生成随机密钥);CTime t0=CTime:GetCurrentTime();m_publicp = _T(); p.Mov(0);p.GetPrime(32);p.Put(m_publicp); g.Mov(0); g.GetPrime(6); g.Put(m_publicg);b.Mov(0);b.GetPrime(6);b.
10、Put(m_privateb);B.Mov(0);B.Mov(g.RsaTrans(b,p);B.Put(m_publicB); a.Mov(0);a.GetPrime(6); A.Mov(0);A.Mov(g.RsaTrans(a,p);ready=1;CDialog:UpdateData(FALSE); AfxGetApp()-EndWaitCursor();AfxGetMainWnd( )-SetWindowText(caption); 3.2 签名变换主要代码如下:void CELGmaltest:OnOK() CELGamaltoolDlg *pParent=(CELGamaltoo
11、lDlg *)GetParent();if(pParent-ready=0)m_out=_T(请先生成随机密钥); CDialog:UpdateData(FALSE);return;CDialog:UpdateData(TRUE);length=m_in.GetLength(); if(length=0)m_out=_T(输入明文); CDialog:UpdateData(FALSE);return; if(m_out.GetLength()0) m_out=_T(); AfxGetApp()-BeginWaitCursor(); CTime t0=CTime:GetCurrentTime()
12、; str_mw=; int c1;for(int i=0;ilength;i+)c1=m_ini;if(c10)c1+=256;str_mw+=Int10_To_Hexstr(c1,2); length=str_mw.GetLength(); CBigInt temp; CBigInt temp1; CString s,str; int j=0; for( i=0;iB.RsaTrans(pParent-a,pParent-p); str=str_mw.Mid(i,2); temp1.Mov(Hexstr_To_Int10(str); resultj.Mov(temp.Mul(temp1);
13、 resultj.Mov(resultj.Mod(pParent-p); resultj.Put(s); j+; m_out+=s; CDialog:UpdateData(FALSE); AfxGetApp()-EndWaitCursor();3.3 签名验证主要代码如下:void CELGmaltest:OnButton1() / TODO: Add your control notification handler code here CELGamaltoolDlg *pParent=(CELGamaltoolDlg *)GetParent(); if(pParent-ready =0)|
14、(length=0)m_out=_T(请先进行加密); CDialog:UpdateData(FALSE);return; if(m_out.GetLength()0) m_out=_T(); /生成等待光标 AfxGetApp()-BeginWaitCursor(); CTime t0=CTime:GetCurrentTime(); CString s=_T(),plaintext=_T(); CBigInt temp,temp1; temp.Mov(pParent-p.Sub(pParent-b); temp.Mov(temp.Sub(1); temp.Mov(pParent-A.RsaT
15、rans(temp,pParent-p); for(int t=0;tp); resultt.Put(s); plaintext+=s; char c1; CString str; length=plaintext.GetLength();for( int i=0;ilength;i+=2)str=plaintext.Mid(i,2);c1=Hexstr_To_Int10(str); if(c1EndWaitCursor();3.4数据处理#include stdafx.h#include BigInt.hconst static int PrimeTable550=/小素数表 3, 5, 7
16、, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337,
17、 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, ;CBigInt:CBigInt()/构造大数对象并初始化为零 m_
18、nLength=1; for(int i=0;iA.m_nLength)return 1;/返回值:若NA返回1 if(m_nLength=0;i-) if(m_ulValueiA.m_ulValuei)return 1; if(m_ulValueiA.m_ulValuei)return -1; return 0;void CBigInt:Mov(CBigInt& A)/大数赋值,调用方式:N.Mov(A) m_nLength=A.m_nLength; for(int i=0;i0xffffffff) m_nLength=2; m_ulValue1=(unsigned long)(A32);
19、m_ulValue0=(unsigned long)A; else m_nLength=1; m_ulValue0=(unsigned long)A; for(int i=m_nLength;iBI_MAXLEN;i+)m_ulValuei=0;CBigInt CBigInt:Add(CBigInt& A)/大数相加 调用形式:N.Add(A) CBigInt X; X.Mov(*this); unsigned carry=0; unsigned _int64 sum=0; if(X.m_nLengthA.m_nLength)X.m_nLength=A.m_nLength; for(unsig
20、ned i=0;i32); X.m_ulValueX.m_nLength=carry;/返回值:N+A X.m_nLength+=carry; return X;CBigInt CBigInt:Add(unsigned long A) CBigInt X; X.Mov(*this); unsigned _int64 sum; sum=X.m_ulValue0;sum+=A; X.m_ulValue0=(unsigned long)sum; if(sum0xffffffff) unsigned i=1; while(X.m_ulValuei=0xffffffff)X.m_ulValuei=0;i
21、+; X.m_ulValuei+; if(m_nLength=i)m_nLength+; return X;CBigInt CBigInt:Mul(unsigned long A) CBigInt X; unsigned _int64 mul; unsigned long carry=0; X.Mov(*this); for(unsigned i=0;i32); if(carry)X.m_nLength+;X.m_ulValueX.m_nLength-1=carry; return X;void CBigInt:Get(CString& str, unsigned int system)/调用
22、格式:N.Get(str,sys) int len=str.GetLength(),k;/从字符串按10进制或16进制格式输入到大数 Mov(0); for(int i=0;i=0)&(stri=A)&(stri=a)&(stri0) a=X.Mod(system); ch=ta; str.Insert(0,ch); X.Mov(X.Div(system);/sys暂时只能为10或16 CBigInt CBigInt:Euc(CBigInt& A)/调用方式:N.Euc(A)CBigInt M,E,X,Y,I,J; int x,y;M.Mov(A);E.Mov(*this);X.Mov(0);Y.Mov(1);x=y=1;while(E.m_nLength!=1)|(E.m_ulValue0!=0)/求不定方程ax-by=1的最小整数解I.Mov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购验收流程规范与实施
- 新生儿口腔护理操作流程
- 搭建培训体系汇报
- 人文教育体系构建与实施路径
- 小学生排队礼仪课件视频
- 2025年太阳能发电机组项目申请报告
- 恶性肿瘤三级预防与未病干预体系
- 口腔医疗质量培训课件
- 钟表设计原理与工艺创新
- 微笑的力量:心理健康教育主题活动实践
- 成人住院患者跌倒评估与预防(团体标准)解读
- 公司乒乓球、台球比赛策划
- 【浅析顾客满意度的评价指标体系文献综述6100字】
- 戴海崎心理与教育测量第4版课后习题答案
- 新概念英语第二册单词表默写纸
- 工业机器人维护与保养PPT全套完整课件
- 新华书店读者问卷调查表
- JJG 315-1983直流数字电压表
- GB/T 15088-2009道路车辆牵引销强度试验
- 熠搜家庭户用光伏电站推介
- 高中区域地理:极地地区南极、北极
评论
0/150
提交评论