欢迎光临散文网 会员登陆 & 注册

RSA公钥密码的实现

2020-09-04 22:43 作者:乔知洛  | 我要投稿

实验目的:

(1)帮助学生掌握RSA公钥系统的密钥生成、加密和解密的过程,能够利用所学过的编程语言熟悉RSA公钥加密算法流程与编程实现加密算法。掌握编程实现实际中问题的方法,提高解决问题的能力。

(2)要求学生掌握算法的程序实现的方法,能应用密码算法的特点,设计合适的交互界面,并能正确实现应用编程。

(3)要求学生掌握用规范的方法书写实验报告。

 

实验仪器设备/实验环境

PC Windows操作系统,使用Java语言编程,或者使用数学软件MATLAB、Maple编程,以下使用的是Visual C++ 6.0

 

实验原理

RSA公钥密码原理

 

实验内容

解密:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

    int p,q;//定义p,q

    cout<<"输入p、q (p、q为质数,不支持过大)"<< endl;//输出"输入p、q (p、q为质数,不支持过大),并且换行

    cin>>p>>q;//输入p,q

    int m=p*q;//定义m=p*q

    int n=(p-1)*(q-1);//定义n=(p-1)*(q-1)

    int e;//定义e

    cout<<"输入e (e与"<<n<<"互质) 且 1<e<"<<n<<endl;//输出 "输入e (e与"<<n<<"互质) 且 1<e<

    cin>>e;//输入e

    int d;//定义d

    for(d=1;;d++)

    {

        if(d*e%n==1)

          break;

    }

//循环 找出d使得ed=1(mod n)

    cout<<endl<<endl;

 

    cout<<"{ "<<e<<","<<m<<" }"<<"为公钥"<<endl;

    cout<<"{ "<<d<<","<<m<<" }"<<"为私钥"<<endl;

 

    cout<<endl<<endl;

    int after;

    cout<<"输入密文"<<endl;

    cin>>after;

    int before;

    int i;

    before=after%n;

    for(i=1;i<d;i++)

        before=(before*after)%m;

    //计算C^d=m(mod n)

    cout<<"明文为"<<endl;

    cout<<before<<endl;

}

结果:

加密:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

    int p,q;//定义p,q

    cout<<"输入p、q (p、q为质数,不支持过大)"<< endl;//输出"输入p、q (p、q为质数,不支持过大),并且换行

    cin>>p>>q;//输入p,q

    int m=p*q;//定义m=p*q

    int n=(p-1)*(q-1);//定义n=(p-1)*(q-1)

    int e;//定义e

    cout<<"输入e (e与"<<n<<"互质) 且 1<e<"<<n<<endl;//输出 "输入e (e与"<<n<<"互质) 且 1<e<

    cin>>e;//输入e

    int d;//定义d

    for(d=1;;d++)

    {

        if(d*e%n==1)

          break;

    }

//循环 找出d使得ed=1(mod n)

    cout<<endl<<endl;

 

    cout<<"{ "<<e<<","<<m<<" }"<<"为公钥"<<endl;

    cout<<"{ "<<d<<","<<m<<" }"<<"为私钥"<<endl;

 

    cout<<endl<<endl;

    int before;

    cout<<"输入明文"<<endl;

    cin>>before;

    int after;

    int i;

    after=before%n;

    for(i=1;i<e;i++)

        after=(after*before)%m;

    //计算m^e=C(mod n)

    cout<<"密文为"<<endl;

    cout<<after<<endl;

}

结果:

实验心得

RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
整个加密解密的过程大概是;首先假设甲方要向乙方发送消息那么甲方需要对消息加密乙方需要对消息解密加密算法分为对称性和非对称性2种算法根据加密解密所使用的秘钥相不相同来区分,我们要讨论的RSA算法就是非对称性的也就是加密的公钥和解密的私钥是不同的由于公钥是公开的可以给别人看到所以不需要保护,只需要保护好私钥不被窃取即可,通常私钥的窃取都是在传输的过程中进行的,所以只要防止私钥的传输就好了。因此甲方发送消息给乙方,所以乙方产生公钥和私钥,之后将公钥公开,用于甲方对消息加密,然后乙方自己拥有私钥,只需要使用私钥解密即可。


RSA公钥密码的实现的评论 (共 条)

分享到微博请遵守国家法律