欢迎来到天天文库
浏览记录
ID:12801271
大小:353.50 KB
页数:12页
时间:2018-07-19
《基于rsa方式加密解密面向对象程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、题目加密解密课程名称面向对象程序设计课程设计12/12目录1题目描述12功能分析22.1运算密钥模块32.2加密模块32.3解密模块32.4退出3系统设计43.1程序总体结构43.2主功能模块设计53.3程序设计73.4类与函数的设计与实现:包括功能、名称、参数说明84运行与测试结果105小结1212/121.题目描述加密解密要求:(1)设计算法,对文件进行基于字符变形的加密/解密。(2)编写程序,程序运行需要口令,口令存放在一个文件中,为了避免口令文件被阅读,不能以明文形式存放,利用(1)的思路,生成一个口令密文文件,
2、可以修改口令。2.功能分析RSA加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。算法的名字以发明者的姓氏首字母命名:RonRivest,AdiShamir和LeonardAdleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。2.1运算密钥RSA算法首先需要运算出密钥,用户需输入两个素数,程序会给出处理后的密钥。密钥分公钥和私钥两种
3、,公钥用于加密文件,私钥用于解密文件。2.2加密12/12该模块主要用于加密功能。用户输入加密所需的公钥,然后输入所要加密的内容,程序会将其保存在mingwen.txt文件中,加密后的密文会保存于miwen.txt文件中。2.3解密该模块主要用于解密功能。用户需输入与公钥对应的私钥,然后输入加密后的密文,程序会解密该密文。2.4退出系统该模块用于推出本系统。3系统设计3.1程序总体结构如图为程序的总体结构图,由于功能不多,程序不是很复杂。系统从mian()函数开始执行。从构造函数开始,根据用户的输入分别执行对应的函数。3
4、.2主功能模块设计程序主要分为三个模块:运算密钥、加密和解密。下面就对这三个模块作详细的介绍。1.密钥运算在RSA算法中密钥运算时一个很重要的部分。用户需要输入两个素数。密钥的产生12/121)选取两个保密的大素数p和q;2)计算n=p*q,φ(n)=(p-1)(q-1)其中φ(n)是n的欧拉函数值;3)选一整数e,满足15、,n}为密钥。具体流程图如下:12/122.加密模块用户输入公钥后按提示输入所要加密的内容,程序会将其保存在mingwen.txt文件中,加密后的密文会保存于miwen.txt文件中。加密时首先将明文比特串分组,使得每个分组对应的十进制小于n。然后对每个明文分组m,做加密运算:c=m^emodn具体流程图如下:3.解密模块该模块主要用于解密功能。用户需输入与公钥对应的私钥,然后输入加密后的密文,程序会解密该密文。对密文分组的解密运算为:m=c^dmodn12/12具体流程图如下:3.3程序设计1)数据结构Longp,q/6、/存放所输入的两个素数;Longd//存放模φ(n)下的乘法逆元Longe,n//存放公钥Filefp1//存放明文Filefp2//存放密文2)方法Intjudge_num()//判断素数函数Voidcreatkey()//产生密钥函数Longckey()//加密函数Longrkey()//解密函数3.4类与函数的设计与实现:包括功能、名称、参数说明1)Intjudge_num()函数功能:判断输入的数字是否为素数。具体代码如下:intjudge_num(longn){longtemp=0,i;for(i=2;i<=n7、/2;i++)12/12temp=n%i;returntemp;}2)Voidcreatkey()函数功能:根据输入的素数产生密钥。具体代码如下:voidcreatkey(longp,longq,longd){longe,n,m;boolok=true;cout<<"p=";cin>>p;while(judge_num(p)==0){cout<<"p不是素数,请重新输入:p=";cin>>p;}cout<<"q=";cin>>q;while(judge_num(q)==0){cout<<"q不是素数,请重新输入:q=";8、cin>>q;}n=p*q;m=(p-1)*(q-1);for(e=2;e<=m/2;e++)for(d=(int)sqrt(n);d>0;d--){if((e*d)%m==1){cout<<"公钥:e=";cout<
5、,n}为密钥。具体流程图如下:12/122.加密模块用户输入公钥后按提示输入所要加密的内容,程序会将其保存在mingwen.txt文件中,加密后的密文会保存于miwen.txt文件中。加密时首先将明文比特串分组,使得每个分组对应的十进制小于n。然后对每个明文分组m,做加密运算:c=m^emodn具体流程图如下:3.解密模块该模块主要用于解密功能。用户需输入与公钥对应的私钥,然后输入加密后的密文,程序会解密该密文。对密文分组的解密运算为:m=c^dmodn12/12具体流程图如下:3.3程序设计1)数据结构Longp,q/
6、/存放所输入的两个素数;Longd//存放模φ(n)下的乘法逆元Longe,n//存放公钥Filefp1//存放明文Filefp2//存放密文2)方法Intjudge_num()//判断素数函数Voidcreatkey()//产生密钥函数Longckey()//加密函数Longrkey()//解密函数3.4类与函数的设计与实现:包括功能、名称、参数说明1)Intjudge_num()函数功能:判断输入的数字是否为素数。具体代码如下:intjudge_num(longn){longtemp=0,i;for(i=2;i<=n
7、/2;i++)12/12temp=n%i;returntemp;}2)Voidcreatkey()函数功能:根据输入的素数产生密钥。具体代码如下:voidcreatkey(longp,longq,longd){longe,n,m;boolok=true;cout<<"p=";cin>>p;while(judge_num(p)==0){cout<<"p不是素数,请重新输入:p=";cin>>p;}cout<<"q=";cin>>q;while(judge_num(q)==0){cout<<"q不是素数,请重新输入:q=";
8、cin>>q;}n=p*q;m=(p-1)*(q-1);for(e=2;e<=m/2;e++)for(d=(int)sqrt(n);d>0;d--){if((e*d)%m==1){cout<<"公钥:e=";cout<
此文档下载收益归作者所有