- 9
- 0
- 约4.07千字
- 约 12页
- 2017-10-19 发布于重庆
- 举报
基于RSA方式加密解密面向对象程序设计
题 目 加密解密
课 程 名 称 面向对象程序设计课程设计
目录
1 题目描述 1
2 功能分析 2
2.1运算密钥模块 3
2.2加密模块 3
2.3解密模块 3
2.4 退出
3 系统设计 4
3.1程序总体结构 4
3.2主功能模块设计 5
3.3程序设计 7
3.4类与函数的设计与实现:包括功能、名称、参数说明 8
4运行与测试结果 10
5小结 12
题目描述
加密解密
要求:(1)设计算法,对文件进行基于字符变形的加密/解密。
(2)编写程序,程序运行需要口令,口令存放在一个文件中,为了避免口令文件被阅读,不能以明文形式存放,利用(1)的思路,生成一个口令密文文件,可以修改口令。
功能分析
RSA加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。
2.1 运算密钥
RSA算法首先需要运算出密钥, 用户需输入两个素数,程序会给出处理后的密钥。密钥分公钥和私钥两种,公钥用于加密文件,私钥用于解密文件。
2.2 加密
该模块主要用于加密功能。用户输入加密所需的公钥,然后输入所要加密的内容,程序会将其保存在mingwen.txt文件中,加密后的密文会保存于miwen.txt文件中。
2.3 解密
该模块主要用于解密功能。用户需输入与公钥对应的私钥,然后输入加密后的密文,程序会解密该密文。
2.4 退出系统
该模块用于推出本系统。
3 系统设计
3.1 程序总体结构
如图为程序的总体结构图,由于功能不多,程序不是很复杂。系统从mian()函数开始执行。从构造函数开始,根据用户的输入分别执行对应的函数。
3.2 主功能模块设计
程序主要分为三个模块:运算密钥、加密和解密。下面就对这三个模块作详细的介绍。
1.密钥运算
在RSA算法中密钥运算时一个很重要的部分。用户需要输入两个素数。
密钥的产生
1)选取两个保密的大素数p和q ;
2)计算n=p*q , φ(n)=(p-1) (q-1)
其中φ(n)是n的欧拉函数值;
3)选一整数e,满足1eφ(n) , 且gcd(φ(n),e)=1;
4)计算d,满足d.e =1 modφ(n)
即 d 是在模φ(n)下的乘法逆元,因e与φ(n)互素,由模运算可知,它的乘法逆元一定存在;
5){e, n}为公开钥,{d, n}为密钥。
具体流程图如下:
2.加密模块
用户输入公钥后按提示输入所要加密的内容,程序会将其保存在mingwen.txt文件中,加密后的密文会保存于miwen.txt文件中。
加密时首先将明文比特串分组,使得每个分组对应的十进制小于n。然后对每个明文分组m,做加密运算:
c=m^e mod n
具体流程图如下:
3. 解密模块
该模块主要用于解密功能。用户需输入与公钥对应的私钥,然后输入加密后的密文,程序会解密该密文。
对密文分组的解密运算为:
m=c^d mod n
具体流程图如下:
3.3 程序设计
1)数据结构
Long p,q //存放所输入的两个素数;
Long d //存放模φ(n)下的乘法逆元
Long e,n //存放公钥
File fp1 //存放明文
File fp2 //存放密文
2)方法
Int judge_num() //判断素数函数
Void creatkey() //产生密钥函数
Long ckey() //加密函数
Long rkey() //解密函数
3.4 类与函数的设计与实现:包括功能、名称、参数说明
1)Int judge_num()函数
功能:判断输入的数字是否为素数。具体代码如下:
int judge_num(long n)
{
long temp=0,i;
for(i=2;i=n/2;i++)
原创力文档

文档评论(0)