- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络安全作业
1.RSA 算法流程如下:
(1)密钥生成算法流程:
随机地选择两个大素数 p和q (需);
计算乘积n=px q;
计算欧拉函数z= (n)=(p-1)(q-1)。其数值等于小 于n并且与n互质的整数的个数。
选择一个随机数e,使e与z互质,且1ezo
计算 d,使d*e=1 mod z 。
其中,公钥 KP={e,n} ,私钥 KS={d,n} o
(2) RSA 加密、解密的过程
首先将明文分块并数字化,每个数字化明文块的长度小于或等于 log 2n。然后对每个明文块M依次进行
加、解密:
加密:使用公钥 e和加密密文m,即C=Memod n;
解密:使用私钥d将密文c解密,获得明文 m,即M=cdmod n。
具体的数据结构与算法:
(1 )存储大整数的数据结构:
typedef struct
{
int length;
unsigned int n[MAX]; } Lint;
这里大整数用65536进制表示并使用结构体Lint存储大整数。Lint由一个整型变量length和一个无符号整 型数组n[MAX]构成,length存储大整数的位数,n[MAX]具体存储每一位的值。
(2)具体的算法:
具体的算法主要参考了此书:振江等译?《密码编码学 一一加密方法的C与C十十实现(第二版)》.:
电子工业, 2003
具体的算法包括:基于上述数据结构的大整数的加、减、乘、除、模幂运算,求逆元运算,以及大素 数的判定等。这些算法的具体容都在原程序与其注释中。
源程序
此程序的开发环境是 Microsoft Visual studio 2008 。
(1) RSA 生成密钥源程序及运行结果
#includeiostream #includecmath using namespace std;
void main()
{
int p,q;
cout*****RSA 生成密钥算法 *****endlendl;
cout 请输入两个较大的素数: endl;
cinpq;
coutp=p,q=qendl;
int n,o;
n=p*q;
o=(p-1)*(q-1);
coutn=n,o=oendl;
cout?请从(0,0-1)中选择一个与vvovv互素的数 e: vvendl;
int e,i;
float d;
cin?e;
for(i=1;;i++)
{
d=(float)(o*i+1)/e;
if(d-(int)d==0)
break;
}
coutvve=vevv,d=vvdvve ndl;
cout?公开密钥 Pk={e,n}={vvevv,vvnvv}vvendl; coutvv秘密密钥 Sk={d,n}={vvdvv,vvnvv}vvendl; coutvvendl;
coutvv请输入要加密的正整数(以 -1结束):vvendl;
int m1[500],m3[500],m4[500];
double m2[500];
int j;
for(j=0;jv500;j++)
{
cinm1[j];
if(m1[j]==-1)
break;
m2[j]=pow(m1[j],e);
m4[j]=m2[j]/n; m3[j]=m2[j]-m4[j]*n;
}
coutvv密文为:vvendl;
int k;
for(k=0;kvj;k++)
coutvvm3[k]vv; coutvvendl;
}
程序运行结果及分析:
*****Rgn生成密钥算迭*****
请输入两个较夫的素数:
343S55
43545
43 5
n=2075200587,0=207481348B
请从5, 2074813487中选择一个与20748£3498互素的数6 45457
6=454657,4=4231
公幵霁月 Pk-e ,n -45465?
fe^^tJSk=d,ri=4231,20?5200S8?
算法按照要求进行,生成的密钥也符合要求。
(2)RSA加密及解密算法实现源程序及运行结果
#include stdafx.h
#include vstdio.h
#include vstdlib.h
#include vstring.h
#include vtime.h
#define MAX 200 /定义大整数的最大位数,200完全可以满足p与q达到768bit位的要求,可以选择更大的数
#define GREAT 1 //定义大整数比较时的返回值
#define EQUAL 0
#define LOW -1
33保证p与q达到512bit长#define PL 33 〃如果重新生成p与q,
33保证p与q达到512bit长
度。
typedef struct
{
int length; unsigned in
您可能关注的文档
最近下载
- 常见的平面牵出线调车工作(宽屏).ppt
- 行风建设及医德医风考核领导小组 .pdf VIP
- 2024危险化学品重大生产安全事故隐患判定标准考核试题及答案.docx VIP
- 宁攀高速zcb1-14项目部现浇箱梁统计表.xlsx VIP
- 咸阳市事业单位招聘硕士研究生人员真题.docx VIP
- 物业管理服务节能降耗与环保管理方案.pdf
- 万东医疗DR产品介绍课件.ppt
- 高中政治2025届高考《中国特色社会主义》真题汇总练习(附参考答案).doc
- 联通新融合发展技能竞赛(业务管理及稽核赛道)试题及答案.doc VIP
- 山东省临沂市罗庄区2023-2024学年七年级上学期期中考试语文试题(含答案).doc VIP
文档评论(0)