版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验目的通过实际编程了解非对称密码算法RSA的加密和解密过程,加深对非对称密码算法的认识。实验软件环境运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。实验内容为了加深对RSA算法的了解,根据已知参数:p=3,q=11,M=2,手工计算公私钥,并对明文进行加密,然后对密文进行解密。附件中给出了一个可以进行RSA加密和解密的对话框程序RSATool运行这个程序加密一段文字,了解RSA算法原理。尝试着加密一大段文字,记录程序的运行时间。使用DES算法加密相同的文字,比较两种算法加密的速度。测试结果:四、实验结果:(1)编写一个程序,随机选择3个较大的数x、e、n,然后计算xemodn,记录程序运行时间。实际中应用的素数为512位,n也就为1024位。这样的大数在计算机上如何表示、如何进行运算,查阅资料给出简单说明。RSA依赖大数运算,目前主流RSA算法都建立在512位到1024位的大数运算之上,可是,大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等于64位,这远远达不到RSA的需要,于是需要专门建立大数运算库来解决这一问题。另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。调用程序〃大数求模〃调用形式:N.Mod(A),返回值:N%ACBigIntCBigInt::Mod(CBigInt&A){CBigIntX,Y;intlen;unsigned_int64num,div;unsignedlongcarry=0;X.Mov(*this);while(X.Cmp(A)>0){if(X.m_ulvalue[X.m_nLength-1]>A.m_ulvalue[A.m_nLength-1]){len=X.m_nLength-A.m_nLength;div=X.m_ulvalue[X.m_nLength-1]/(A.m_ulvalue[A.m_nLength-1]+1);}elseif(X.m_nLength>A.m_nLength){len=X.m_nLength-A.m_nLength-1;num=X.m_ulvalue[X.m_nLength-1];num=(num<<32)+X.m_ulvalue[X.m_nLength-2];if(A.m_ulvalue[A.m_nLength-1]==0xffffffff)div=(num>>32);elsediv=num/(A.m_ulvalue[A.m_nLength-1]+1);}else{Mov(X.Sub(A));break;}Y. Mov(div);Y.Mov(Y.Mul(A));Y.m_nLength+=len;for(inti=Y.m_nLength-1;i>=len;i--)Ym_ulvalue[i]=Ym_ulvalue[i-len];for(i=0;i<len;i++)Y.m_ulvalue[i]=0;广东工业大学实验报告___ 学院网络工程 专业_—__班学号 _姓名——___成绩评定教师签名 实验_二题目__ 非对称密码算法RSA 课程名称—络安全与管理 X.Mov(X.Sub(Y));}if(X.Cmp(A)==0)X.Mov(0);returnX;}(2)计算机在生成一个随机数时,并不一定就是素数,因此要进行素性检测。是否有确定的方法判定一个大数是素数,要查阅资料,找出目前实际可行的素数判定法则,并且比较各自的优缺点。所谓素数,是指除了能被1和它本身整除而不能被其他任何数整除的数。①根据素数的定义,用2到N-1去除N,如果都除不尽则N是素数。flay=0,i=2.//flay为标志,其初值为0,只要有一个数除尽,其值变为1.If(nmodi=0)flay=l;elsei=i+1; //nmodi是n除以i的余数.If(flay=0andI<=n-1){If(nmodi=0)flay=l;elsei=i+1;}Else{If(flay=0)cout<<"n是素数。”;elsecout<<“不是素数”;}最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂性太大。费马小定理,即如果P是一个素数,且0<a<p,则aA(p-1)三1(modp)例如,67是一个素数,则2A66mod67=1。利用费马小定理,对于给定的整数n,可以设计一个素数判定算法。通过计算d=2A(n-1)modn来判定整数n的素性。当d不等于1时,n肯定不是素数;当d等于1时,n则很可能是素数。但也存在合数n使得2A(n-1)三1(modn)。例如,满足此条件的最小合数是n=341。为了提高测试的准确性,我们可以随机地选取整数1费马小定理毕竟只是素数判定的一个必要条件。满足费马小定理条件的整数n未必全是素数。有些合数也满足费马小定理的条件。这些和数被称做Carmichael数,前3个Carmichael数是561,1105,1729。Carmichael数是非常少的。在1〜100000000范围内的整数中,只有255个Carmichael数。利用下面的二次探测定理可以对上面的素数判定算法作进一步改进,以避免将Carmichael数当作素数。二次探测定理,即如果p是一个素数,0<x<p,则方程x'2=1(modp)的解为x=1,p-1下面是算法的步骤,n是我们要测试的数据:0、先计算出m、j,使得n-1=m*2Aj,其中m是正奇数,j是非负整数1、 随机取一个b,2<=b2、 计算v=bAmmodn3、 如果v==1,通过测试,返回4、 令i=15、 如果v=n-1,通过测试,返回6、 如果i==j,非素数,结束7、 v=vA2modn,i=i+18、 循环到5对于素数的判定还有别的方法,如用概率算法求素数,但其理论太难,一般情况下很少用。⑶附件中给出了一个密码算法库,其中包括各种对称加密算法、非对称加密算法、Hash算法和数字签名算法。找出其中关于RSA算法的部分,并且基于标准输入输出写一段用RSA加密文件的程序。①程序核心代码:#include<iostream>#include"mycrypt.h"usingnamespacestd;intmain(void)实验_二题目__ 非对称密码算法RSA 课程名称—络安全与管理{interr,hash_idx,prng_idx,res;unsignedlong11,12;unsignedcharpt2[128],out[1024];rsa_keykey;if(register_prng(&sprng_desc)==-1){printf("Errorregisteringsprng");returnEXIT_FAILURE;}if(register_hash(&sha1_desc)==-1){printf("Errorregisteringsha1");returnEXIT_FAILURE;}hash_idx=find_hash("sha1");prng_idx=find_prng("sprng");if((err=rsa_make_key(NULL,/*PRNGstate*/prng_idx,/*PRNGidx*/1024/8,/*1024-bitkey*/65537,/*welikee=65537*/&key)/*wheretostorethekey*/)!=CRYPT_OK){printf("rsa_make_key%s",error_to_string(err));returnEXIT_FAILURE;}FILE*fd1;FILE*fd2;FILE*fd3;fd1=fopen("p1aintext1.txt”,"rb”);fd2=fopen("cipertext.txt","wb");intcount=0;unsignedcharp_buf[16];unsignedchartt[]="TestApp”;11=sizeof(out);while(true){count=fread(p_buf,sizeof(unsignedchar),16,fd1);for(intj=0;j<count;j++)cout<<p_buf[j];if((err=rsa_encrypt_key(p_buf,/*datawewishtoencrypt*/count,/*datais16byteslong*/out,/*wheretostoreciphertext*/&11,/*lengthofciphertext*/tt,/*ourlparamforthisprogram*/7,/*lparamis7byteslong*/NULL,/*PRNGstate*/prng_idx,/*pingidx*/hash_idx,/*Hashidx*/&key)/*ourRSAkey*/)!=CRYPT_OK){printf("rsa_encrypt_key%s",error_to_string(err));returnEXIT_FAILURE;}fwrite(out,sizeof(unsignedchar),11,fd2);if(count<16)break;count=0;}fclose(fd1);fclose(fd2);fd2=fopen("cipertext.txt","rb");fd3=fopen("p1aintext2.txt”,"wb”);unsignedcharc_buf[128];long13=sizeof(c_buf);while(true)实验二题目非对称密码算法RSA 课程名称—络安全与管理{count=fread(c_buf,sizeof(unsignedchar),128,fd2);if(count==0)break;l2=sizeof(pt2);if((err=rsa_decrypt_key(c_buf,/*encrypteddata*/l3,/*lengthofciphertext*/pt2,/*wheretoputplaintext*/&l2,/*plaintextlength*/tt,/*lparamforthisprogram*/7,/*lparamis7byteslong*/NULL,/*PRNGstate*/prng_idx,/*prngidx*/hash_idx,/*hashidx*/&res,/*validityofdata*/&key)/*ourRSAkey*/)!=CRYPT_OK){printf("err=rsa_decrypt_key%s",error_to_string(err));returnEXIT_fAiLURE;}for(intk=0;k<l2;k++)cout<<pt2[k];fwrite(pt2,sizeof(unsigned
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件产品授权及购买合同范本
- 汽车销售协议格式模板
- 服务合同与保管合同的押金法律依据
- 房屋买卖合同终止的法定条件和程序
- 专项服务提供协议
- 进口烟煤粉采购合同
- 电子设备分期付款购销协议
- 招标项目文件详细剖析要点
- 工程项目监理协议书
- 农民工工资安全协议
- 2024-2030年中国动漫产业园行业发展现状及投资前景规划展望报告
- 第4章《一元一次方程》-2024-2025学年七年级数学上册单元测试卷(苏科版2024新教材)
- 旧平房拆除施工方案
- 浙江省杭州市采荷中学2024-2025学年七年级上学期期中考试英语试题
- DB3502T 148-2024中小型水库生产运行标准化管理规程
- 《供应链管理》期末考试复习题库(含答案)
- GB/T 44672-2024体外诊断医疗器械建立校准品和人体样品赋值计量溯源性的国际一致化方案的要求
- 2024年教师资格考试高级中学面试历史试题与参考答案
- 算力服务租赁合同
- 互联网营销师技能竞赛理论考试题及答案
- 2024年普通高等学校招生全国统一考试·新课标卷(物理)附试卷分析
评论
0/150
提交评论