密码学课程报告笔记.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
密码学课程报告 卢学东(学号:010182025,导师:张治国) 概述 本程序是一个对RSA加密和解密方法的演示程序,它的界面如下: 公钥和密钥可以自己键入,也可以按“自动产生”由程序随机产生两个100个十进制位的素数。下面最左方的文本框里的是要加密的文本,它也可以由文本文件输入。按“加密 ”按钮将对输入的文本进行加密,而且结果用十六进制的32位整数串给出。按“解密 ”将对加密结果进行解密,结果放在最右边的文本框里。 RSA加解密的关键算法是 大整数运算、模幂算法、素数产生和判断、模m逆元的求法、以及RSA本身的加解密算法。下面将一一详述。 大整数的基本算法 由于想使用现有的CPU的32乘法指令,所以用原码表示一个大整数,且存放在一个32位整数为单位的数组里,用一个类成员lliLength(lliLength≥1)表示数组的长度。另外在类中加了一个成员sign,表示大整数的符号。为了提高运算速度,关键算法例如加减乘除和从一个十进制字符串转换成大整数的算法全部用了汇编语言实现。加法很简单,只用了带进位的加法指令adc,因为最低一个双字相加时用clc指令把进位清零。减法只用了带借位的减法指令sbb,因为最低一个双字相减时用clc指令把借位清零。乘法的算法如下:假设两个大整数M1和M2相乘,M1的长度为n1个32位整数,表示为m1n1-1m1n1-2…m10,M2的长度为n2个32位整数,表示为m2n2-1m2n2-2…m20,则相乘时首先把一个大小为n1+n2的缓冲区清零,然后计算Pj (0≤i≤n2-1),把Pj加到缓冲区的从第j个双字开始的临时结果中。除法就比较麻烦,是按照移位和相减的方法进行,具体步骤如下: 如果被除数小于除数,返回0。 假设被除数有D1个双字,除数有D2个双字。比较被除数和除数的前D2个双字,如果小于,在被除数前补上一个为0的32位整数;否则,在被除数前补上两个为0的32位整数。 令商等于0。 计算要移位的二进制位的总数为 D1+4-D2 ×8(被除数前补32位整数)或者 D1+8-D2 ×8(被除数前补64位整数)。 计算被除数和除数的最高的双字的二进制的0的个数(从高位算起,直到遇到第一个不是0的二进制位),且分别命名为dividendLeadingZeros和divisorLeadingZeros。商和被除数左移max 1, dividendLeadingZeros – divisorLeadingZeros 比较除数和被除数的前D2个双字,如果大于,商的最低位置0;否则置1,且被除数的前D2个双字减去除数,放回原缓冲区。 转5,直到被除数左移的位数等于4)中算出的移位总数。 随机数序列的产生 Shannon证明了一次一密密码体制是不可破的,这一结果给密码学研究以很大的刺激。若能以一种方式产生一随机序列,这一序列由密钥所决定,则利用这一序列就可进行加密。随机数序列在RSA算法中也占据了非常重要的位置,尤其在素数查找和测试时。无论是用Jacobi概率测试法还是Miller-Rabin概率测试法,均需要一个从1到n的随机数序列,而且这些随机数要求是等概率产生的。这在计算机系统里几乎是不可能的。在产生素数时,本程序使用的是这样的一个方法:产生一个十进制数字的字符串,这个字符串中的每一个字符均“随机”从字符‘0’到字符‘9’。具体做法是用指令rdtsc读取从80386开始就有的一个时钟计数寄存器。但即使是这样,在这个线程执行的若干毫秒内,产生的序列会非常有规律。故对从第二个开始产生的字符始,让它和上一个产生的进行异或运算。这样看上去就大大提高了随机程度。它的代码如下: while a decBitCount __asm rdtsc mov number, al ;//只要低8位 number number 0x0f; //只要低4位 if a 0 number number ^ strDec[a-1] - 0 ; if number 9 number number - 6; if a 0 number 0 number 5; strDec[a] number + 0; a++; 在素数测试时,用rdtsc先获取一个“随机”的32位整数,然后用这个整数和要测试的大整数的每一双字进行异或,再根据数的范围进行处理。它的代码如下: __asm ;//取得32位“随机”数 rdtsc mov ebx, eax xor bh, al mov dh, bh ror ebx, 8 xor bh, dh ror ebx, 8 xor bh, dh ror ebx, 16 mov randomInt,

文档评论(0)

80092355km + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档