欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    RSA算法实验报告(共8页).doc

    • 资源ID:5439557       资源大小:63KB        全文页数:7页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    RSA算法实验报告(共8页).doc

    精选优质文档-倾情为你奉上 RSA算法的实现实验原理算法原理RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod(p-1)*(q-1)=1。(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=Be2 mod n;B=Ae1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)e1和e2可以互换使用,即:A=Be1 mod n;B=Ae2 mod n;密钥生成 首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。密钥分配 和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。步骤如下(这里设B为是实现着)(1) B寻找出两个大素数p和q。(2) B计算出n=p*q和(n)=)(p-1)*(q-1)。(3) B选择一个随机数e(0<e<(n)),满足(e,(n)=1 (即e与欧拉函数互素(n))。(4) B使用欧几里得算法计算e的模余(n)的乘法逆元素d。(5) B在目录中公开n和e作为他的公开密钥,保密p、q和d。加密时,对每一明文m计算密文 cm(modn)解密时,对每一密文c计算明文 mc(modn)算法流程图 开始输入两个素数p和q N调用Prime()Y 找出N=(p-1)*(q-1)的所有公约数输入不等于N公约数的e输入明文长度len及明文i=0调用ExtendEuclid(e,N,&d)Ni <len开始加密调用Encryption()Y调用multiplication(m1i,e,n)i+输出密文i=0Ni <len开始解密调用Decipher()Y调用multiplication(m1i,e,n)i+输出明文,结束实验结果截图实验源代码#include<iostream.h>#include<math.h>#include<stdio.h>typedef int Elemtype;Elemtype p,q,e;Elemtype fn;Elemtype m,c;int flag=0;typedef void(*Msghandler)(void);struct MsgMapchar ch;Msghandler handler;/*公钥*/struct PUElemtype e;Elemtype n;pu;/*私钥*/struct PRElemtype d;Elemtype n;pr;/*判定一个数是否为素数*/bool test_prime(Elemtype m)if(m<=1)return false;else if(m=2)return true;elsefor(int i=2;i<=sqrt(m);i+)if(m%i)=0)return false;break;return true;/*将十进制数据转化为二进制数组*/void switch_to_bit(Elemtype b,Elemtype bin32)int n=0;while(b>0)binn=b%2;n+;b/=2;/*初始化主界面*/void Init()cout<<"*"<<endl;cout<<"* Welcome to use RSA encoder *"<<endl;cout<<"* 1.setkey *"<<endl;cout<<"* 2.加密 *"<<endl;cout<<"* 3.解密 *"<<endl;cout<<"* 4.退出 *"<<endl;cout<<"*"<<endl;cout<<"press a key:"<<endl;/*将两个数排序,大的在前面*/void order(Elemtype &in1,Elemtype &in2)Elemtype a=(in1>in2?in1:in2);Elemtype b=(in1<in2?in1:in2);in1=a;in2=b;/*求最大公约数*/Elemtype gcd(Elemtype a,Elemtype b)order(a,b);int r;if(b=0)return a;elsewhile(true)r=a%b;a=b;b=r;if(b=0)return a;break;/*用扩展的欧几里得算法求乘法逆元*/Elemtype extend_euclid(Elemtype m,Elemtype bin)order(m,bin);Elemtype a3,b3,t3;a0=1,a1=0,a2=m;b0=0,b1=1,b2=bin;if(b2=0)return a2=gcd(m,bin);if(b2=1)return b2=gcd(m,bin);while(true)if(b2=1)return b1;break;int q=a2/b2;for(int i=0;i<3;i+)ti=ai-q*bi;ai=bi;bi=ti;/*快速模幂算法*/Elemtype modular_multiplication(Elemtype a,Elemtype b,Elemtype n)Elemtype f=1;Elemtype bin32;switch_to_bit(b,bin);for(int i=31;i>=0;i-)f=(f*f)%n;if(bini=1)f=(f*a)%n;return f;/*产生密钥*/void produce_key()cout<<"输入素数 p 和 q:"cin>>p>>q;while(!(test_prime(p)&&test_prime(q)cout<<"输入错误,请重新输入!"<<endl;cout<<"输入素数 p 和 q:"cin>>p>>q;pr.n=p*q;pu.n=p*q;fn=(p-1)*(q-1);cout<<"fn为:"<<fn<<endl;cout<<"输入随机数e:"cin>>e;while(gcd(fn,e)!=1)cout<<"e输入错误,请重新输入!"<<endl;cout<<"输入随机数e:"cin>>e;pr.d=(extend_euclid(fn,e)+fn)%fn;pu.e=e;flag=1;cout<<"公钥(e,n):"<<pu.e<<","<<pu.n<<endl;cout<<"私钥d:"<<pr.d<<endl;cout<<"请输入下一步操作序号:"<<endl;/*加密*/void encrypt()if(flag=0)cout<<"setkey first:"<<endl;produce_key();cout<<"输入明文 m:"cin>>m;c=modular_multiplication(m,pu.e,pu.n);cout<<"密文c 为:"<<c<<endl;cout<<"请输入下一步操作序号:"<<endl;/*解密*/void decrypt()if(flag=0)cout<<"setkey first:"<<endl;produce_key();cout<<"输入密文 c:"cin>>c;m=modular_multiplication(c,pr.d,pr.n);cout<<"明文m 为:"<<m<<endl;cout<<"请输入下一步操作序号:"<<endl;/*消息映射*/MsgMap Messagemap='1',produce_key,'3',decrypt,'2',encrypt,'4',NULL;/*主函数,提供循环*/void main()Init();char d;while(d=getchar()!='4')int i=0;while(Messagemapi.ch)if(Messagemapi.ch=d)Messagemapi.handler();break;i+;专心-专注-专业

    注意事项

    本文(RSA算法实验报告(共8页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开