RSA算法C语言实现 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广州大学学生实验报告开课学院及实验室:年月日

学院年级、专

业、班

姓名学号

实验课程名称成绩

实验项目名称实验4 非对称密码算法实验指导老师

实验目的

掌握产生RSA密钥对的程序设计方法

掌握产生RSA加密/解密的程序设计方法

实验内容

编写函数求出1~65535之间的全部素数

取8-bit的两个素数p,q,并用来生成一对RSA密钥

编写RSA加密/解密程序(可以限制N为16-bit,并利用上述的p,q)

加密你的学号+姓名并随后解密

实验步骤

【RSA算法流程】

加密:

1、取8-bit的两个素数p,q,并用来生成一对RSA密钥

2、根据欧拉函数,求得r=(p-1)(q-1)

3、选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)

4、(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。

5、利用公式将n加密为c,公式:

)

(m od N

c

n e≡

,其中e为公钥

解密:利用公式将c加密为n ,公式:

)

(mod N

n

c d≡

,其中d为私钥

RSA算法的C代码实现

1、判断是否为素数

2、随机产生素数p,q,最大为8bit

3、产生公钥e(根据欧拉函数r,从2开始遍历寻找符合条件的e,直到int变量溢出)

4、产生私钥d(从1开始遍历符合条件的d,直到变量溢出)

5、实现加解密公式的代码(a是加解密文本,b为公钥或私钥,c为N=pq)

运行结果截屏:实验中遇到的问题与解决方法:

1、p,q值过大,导致加密后数据溢出(将获得的p,q的结果mod 254后加1)

2、加密后的数据用char类型存储溢出

(char类型太小,改用int或更大的数据类型存储加密结果更好)

3、cin遇到空格直接返回结果,没有获取空格后的字符串,无法一次读取学号+空格+姓名(改用gets函数)

4、scanf函数与gets函数冲突

(这是因为二者使用的结束标记不同。输入字符串时,scanf()或cin>>遇到空格、回车、Tab 结束,但在缓冲区中还留着这些结束符,此后如果使用gets()想去获取下一行字符串,它碰到的却是前面遗留下来的回车(或者回车之前还有空格等空白符),那么这次gets()就直接失效了,解决方法:用一句while(getchar()!='\n'); 来处理掉缓冲区里的回车换行符,或者改用cin函数)

5、p,q值过小,导致N过小,加密后的字符无法被解密还原为原文

(这是因为公式mod N,结果的范围从0~N-1,所以假如N小于原文的值则解密将出错,解决方法为扩大p,q取值,所以p,q按课件的要求取8bit范围的数可能会出错,范围要扩大到涵盖原文取值,建议取值为逼近8bit的素数)

实验总结:略

相关文档
最新文档