实验五RSA算法的实现.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五RSA算法的实现

上机实验报告(五) 实验课程:应用密码学 实验时间:2013年11月18日 任课教师:刘光军 班级:11级信息与计算科学专业1班 姓名:刘静 学号:0202110123 一、实验名称: RSA算法的实现 二、实验目的 1、了解RSA算法的基本原理; 2、掌握RSA算法的实现方法; 3、通过实际编程了解非对称密码算法RSA的加密和解密过程,同时锻炼编 程能力。 三、实验基础原理 1、RSA密码系统所基于的数学难题是对大素数的因式分解。 2、RSA算法原理: (1) 选择两个大的素数 p 和 q(典型情况下为 1024 位); (2) 计算 n = p * q 和 z =(p-1)*(q-1); (3) 选择一个与 z 互素的数,将它称为 d; (4) 找到 e,使其满足 e*d = 1 mod z。 四、实验思路 1、确定密钥的长度; 2、随机选择两个不同的素数p处q,它们的宽度是密钥宽度的二分之一; 3、计算出p和q的乘积n ; 4、在2和Φ(n)之间随机选择一个数e,e 必须和Φ(n)互素整数e用做加密(其中Φ(n)=(p-1)*(q-1)); 5、从公式ed ≡1 modΦ(n)中求出解密密钥d; 6、得公钥(e,n ),私钥 (d,n); 7、公开公钥,但不公开私钥; 8、将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为:C = Pe mod n 9、将密文C解密为明文P,计算方法为:P = Cd mod n 然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。 五、报告正文(文档,数据,模型,程序,图形) 1、根据以上实验思路编写C/C++程序实现RSA算法,利用该程序给出相关的加解密实例。 #include iostream #include stdlib #include timeusing namespace std;//RSA算法所需参数 typedef struct RSA_PARAM_Tag { unsigned __int64 p, q; //两个素数,不参与加密解密运算 unsigned __int64 f; //f=(p-1)*(q-1),不参与加密解密运算 unsigned __int64 n, e; //公匙,n=p*q,gcd(e,f)=1 unsigned __int64 d; //私匙,e*d=1 (mod f),gcd(n,d)=1 unsigned __int64 s; //块长,满足2^s=n的最大的s,即log2(n) } RSA_PARAM;//小素数表 const static long g_PrimeTable[]= {3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 }; const static long g_PrimeCount=sizeof(g_PrimeTable) / sizeof(long);const unsigned __int64 multiplier=12747293821; const unsigned __int64 adder=1343545677842234541;//随机数类 class RandNumber{ private: unsigned __int64 randSeed; public: RandNumber(unsigned __int64 s=0); unsigned __int64 Random(unsigned __int64 n); }; RandNumber::RandNumber(unsigned __int64 s) { if(!s) { randSeed= (unsigned __int64)time(NULL); } else { randSeed=s; } } unsigned __int64 RandNumber::Random(unsigned __int64 n) { randSeed=multiplier * randSeed + adder; return randSeed % n; }static RandNumber g_Rnd;/* 模乘运算,返回值 x=a*b mod n */ inline unsigne

文档评论(0)

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

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

1亿VIP精品文档

相关文档