java实现rsa欧几里得算法求d_扩展Euclid算法/欧几里得算法,RSA算法求解d

扩展Euclid算法(欧几里得算法) /ˈju:klid/ :

找出两个整数x,y满足:xa+yb=1

为了使x和y存在,a和b的最大公约数必须是1(即a和b互为素数)。

例子:找出x和y,使得51x+100y=1

u

x

y

q

100

0

1

51

1

0

100/51=1

49

0-1*1= -1

1-0*1= 1

51/49=1

2

1-(-1)*1=2

0-1*1=-1

49/2=24

1

-1-2*24=-49

1-(-1)*24=25

2/1=2

0

100

-51

注解:

第一二行:x,y值是固定的模板,只能这样写;第一行中的u值是100和51中较大的那个。

第一个q 是100除以51取商,值是1。第三个u值 是100除以51取余,值是49。

第三行第二个数 = 第一行的x - 第一行的y×1 = 0-1×1

————这里乘的1就是上一行的q值,剩下的0、1是第一行的x,y。

第三行第三个数=1-0*1————1、0是第二行的x,y

51除以49商1余2:第四行第二个数=1-(-1) ×1,第三个数:0-1×1——这里乘的1就是上一行的q值,黄色标注的1,0是第二行的x,y值。

总结:

X的值 = 前两行的x 减去 (前一行的x 乘以 前一行的q)

Y的值 = 前两行的y 减去(前一行的y 乘以 前一行的q)

所以,51X(-49)+100X25=1

最后一行是为了检验有没有算对

将此算法应用到 RSA算法求解d中:

例子:找出d和(-k),满足3d+40(-k)=1

849e1ee8ef9b4a8fbfd44932cc9222ed.png

求得d本来应该是-13的,但通常d取最小正整数。

所以要加上个40就得到了最小正整数。

————注意:-13是d,加上40后仍然也是d,d=27

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值