西南科技大学密码学数学实验RSA

一、实验目的

   利用代码实现RSA加密解密

二、实验内容

1、题目内容描述:

     密钥产生:随机选择两个素数p,q;

               计算n=p*q;   欧拉函数t=(p-1)(q-1);

               选择一个整数e,使得e 与t的最大公约数是1;

               计算d=e-1mod t;所以公开密钥是(n,e);私有密钥是d

加密过程:有明文m ,加密成密文是c=me mod n

解密过程:有密文c ,解密成明文是m=cd mod n

2、关键代码的设计、实现与执行

1,随机选择的素数,且素数通过概率性检验;

    n-1=2sk;分解素数n得出s,k;k是奇数

    for(num1~t=10){

            选择随机整数b,2<=b<=n-2

            计算bk mod p,p是随机出来的素数;

            第一次结果为+ 1时,可以判断可能是素数。

            剩下结果是-1时,可以判断可能素数。

           最多s次,循环模n。}  

2,通过快速模密算法计算y= xa mod n

  将a转换成2进制数,设y1=1,a二进制的最高位开始,遇到1就yx先平方再乘x;遇到 0

  就直接平方。

 通过函数将a转换成2进制,利用数组a[]储存。

 For(i){

      Y1=1;

      If(a[i]==0){  y=y*y mod n }

      Else {y=y*y*x mod n;  }

   }  return y;

3,孙子定理;

 已知m=cdmod n,n=pq;

则分解为1m=cdmod p,2m=cdmod q

M=pq;m1=q,m2=p.

分别求m1p的逆元和m2q的逆元,得到x1,x2.//扩展欧几里得

m=m1*x1*cdmodM +m2*x2*cdmod M.//快速模密算法

4,加密解密算法:

 利用快速模密得出密文。

 利用孙子定理得出明文。

3、实验结果分析

187n=11*17.

由欧拉函数得到t=(11-1)(17-1)=160,已知e=7

利用扩展欧几里得得到e的逆元是23. 23*7=161mod160=1

公钥是187,7.私钥是23.

加密:M=333. C=3337mod187=181

解密:n=11*17.m1=17,m2=11.

求得17mod11的逆元是2,11mod17的逆元是14,算出明文是333

实验不足:求指数的二进制使用了数组,数组开小了容易溢出。

三、实验思考

1、实验过程总结

在本次实验中学会了快速模密算法,将该算法分为两个部分,求指数的二进制和利用01快速求得幂,由于有时幂会溢出,因此每求一次幂就模一次,防止溢出。

选择素数并非输入,而是随机生成素数并利用米勒检验。通过检验的素数大概率是素数,不通过一定不是素数。因此米勒,也叫概率性检验。

2、回答实验指导书最后提出的问题

1 设A从2~(N-1)

C=(A EXP D)  mod N

  满足如下条件:

D是素数,N是两个素数(P,Q)之积,

(D * E) mod ((P-1) * (Q-1))=1

  因为:若

C=(A EXP D)mod N

  有:

A=(C EXP E) mod N

.由题可知,p=101,q=71,e=7.n=p*q=7171  s0=2

C1=27mod7171   C2=249mod7171    c3=2343mod7171    c4=22401mod7171   c5=216807mod7171   C6=2117649 mod 7171    c7=2823543mod7171       c8=25764801mod7171

C9=240353607mod7171      c10=2282475249mod7171

  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值