RSA 平方-乘算法 与 快速幂

本文介绍了RSA算法中平方-乘(Square-and-Multiply)算法和非递归快速幂的原理及实现。平方-乘算法通过处理二进制的高位到低位,以log2(k)的时间复杂度快速计算ak。非递归快速幂则从低位到高位进行,每次判断对应二进制位,根据位值决定是否累乘基数并平方。举例说明了这两种方法在计算大整数幂时的应用。

平方乘算法是快速幂的其中一种,是用于快速计算ak的方法,可以用递归的快速幂实现,其原理在于处理二进制的顺序为从高位到地位,杂度为log2(k)

基本原理:
ak,将k表示为二进制形式则得到abk...b2b1b0,其中bk为高位,b0为低位。
abk...b2b1b0变形得到ab...bb1b02k,或者ab...bbk1bkk20
观察发现
bk为1时abk对答案有“加成”
bk为0时abk“不影响”答案

平方-乘算法原理

利用ab...bb1b02k(高位到低位)的顺序降幂
对于每一次的降幂
1.将当前答案平方(还原二进制位数)
2.若bk=1,则累乘基数a

非递归快速幂

利用ab...bbk1bkk20(低位到高位)的顺序降幂
对于每一次的降幂
1.若bk=1,则累乘当前的a
2.将当前a平方(构造当前a2k

举个例子
计算97263533mod11413
3533=(101100111011)2
平方乘算法(递归快速幂)
这里写图片描述

非递归快速幂
这里写图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值