公钥密码算法RSA实验C语言,完整版RSA算法实验报告

《完整版RSA算法实验报告》由会员分享,可在线阅读,更多相关《完整版RSA算法实验报告(17页珍藏版)》请在人人文库网上搜索。

1、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)就是。

2、密钥对。其中(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交给。

3、Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递,那么她可以将她自己的公钥传给Bob,Bob以为这是Alice的公钥。 步骤如下(这里设B为是实现着) (1)B寻找出两个大素数p和q。 ?(n)=)(p-1)*(2)B计算出n=p*q和q-1)。 ?与欧拉函数互素e(满足(e,即(n)=1 )B选择一个随机数e(0 #include #include typedef int Elemtype; Elemtype p,q,e; Elemtype fn; Elemtype m,c; int flag=0; typedef void(*Msghand。

4、ler)(void); struct MsgMap char ch; Msghandler handler; ; /*公钥*/ struct PU Elemtype e; Elemtype n; pu; /*私钥*/ struct PR Elemtype d; Elemtype n; pr; */ 判定一个数是否为素数/*bool test_prime(Elemtype m) if(m0) binn=b%2; n+; b/=2; /*初始化主界面*/ void Init() coutin2?in1:in2); Elemtype b=(in1=0;i-) f=(f*f)%n; if(bini=1。

5、) f=(f*a)%n; return f; /*产生密钥*/ void produce_key() 潣瑵?输入素数 p 和 q:; cinpq; while(!(test_prime(p)&test_prime(q) 潣瑵?输入错误,请重新输入!pq; ; pr.n=p*q; pu.n=p*q; fn=(p-1)*(q-1); coute; while(gcd(fn,e)!=1) coute; pr.d=(extend_euclid(fn,e)+fn)%fn; pu.e=e; flag=1; 潣瑵?公钥(e,n):m; c=modular_multiplication(m,pu.e,pu.n。

6、); 潣瑵?密文c 为:c; m=modular_multiplication(c,pr.d,pr.n); 潣瑵?明文m 为:mendl; 潣瑵?请输入下一步操作序号: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+ ;。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值