广东工业大学网络工程实验报告-非对称密码算法RSA.doc

广东工业大学网络工程实验报告-非对称密码算法RSA.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
广东工业大学网络工程实验报告-非对称密码算法RSA

一.实验目的 通过。 运行Windows或Linux操作系统的PC机,具有gcc(Linux)、VC(Windows)等C语言编译环境。 (1)//大数求模 //调用形式:N.Mod(A),返回值:N%A CBigInt CBigInt::Mod(CBigInt& A) { CBigInt X,Y; int len; unsigned __int64 num,div; unsigned long carry=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); } else if(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); else div=num/(A.m_ulvalue[A.m_nLength-1]+1); } else { X.Mov(X.Sub(A)); break; } ? Y.Mov(div); Y.Mov(Y.Mul(A)); Y.m_nLength+=len; for(int i=Y.m_nLength-1;i>=len;i--)Y.m_ulvalue[i]=Y.m_ulvalue[i-len]; for(i=0;i<len;i++)Y.m_ulvalue[i]=0; X.Mov(X.Sub(Y)); } if(X.Cmp(A)==0)X.Mov(0); return X; } (2)If (n mod i=0 ) flay=l ; else i=i+1; // n mod i是n除以i的余数. If (flay=0 and I<=n-1) { If (n mod i=0 ) flay=l; else i=i+1; } Else { If (flay=0 ) cout<<“n是素数。”; else cout<<“不是素数”; } 最坏的情形下,即N是素数时,算法1需要执行N-2次除法,时间复杂性太大。 ②费马小定理?如果P是一个素数,且0<a<p,则a^(p-1)≡1(mod?p) 例如,67是一个素数,则2^66mod?67=1。? 利用费马小定理,对于给定的整数n,可以设计一个素数判定算法。通过计算d=2^(n-1)mod?n来判定整数n的素性。当d不等于1时,n肯定不是素数;当d等于1时,n则很可能是素数。但也存在合数n使得2^(n-1)≡1(mod?n)。例如,满足此条件的最小合数是n=341。为了提高测试的准确性,我们可以随机地选取整数1费马小定理毕竟只是素数判定的一个必要条件。满足费马小定理条件的整数n未必全是素数。有些合数也满足费马小定理的条件。这些和数被称做Carmichael数,前3个Carmichael数是561,1105,1729。Carmichael数是非常少的。在1~100000000范围内的整数中,只有255个Carmichael数。利用下面的二次探测定理可以对上面的素数判定算法作进一步改进,以避免将Carmichael数当作素数。二次探测定理如果p是一个素数,0<x<p,则方程x^2≡1(mod?p)的解为x=1,p-1 下面算法的步骤,n是我们要测试的数据: 0、先计算出m、j,使得n-1=m*2^j,其中m是正奇数,j是非负整数 1、随机取一个b,2<=b? 2、计算v=b^m?mod?n 3、如果v==1,通过测试,返回 4、令i=1 5、如果v=n-1,通过测试,返回 6、如果i==j,非素数,结束 7、v=v^2?mod?n,i=i+1 8、循环到5#include<iostream> #include "mycrypt.h" using namespace std; int main(void) { int err, hash_idx, prng_idx, res; unsigned long l1,l2; unsigned char pt2[128],out[1024]; rsa_key key; if (register_prng(

您可能关注的文档

文档评论(0)

zhanghc + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档