一、前言
快速指数算法主要是应用于我上一个博客中提到的RSA算法。
RSA算法无论是加密还是解密,都会用到一个比较大底数和指数,如果直接运算的话,RSA的时间消耗将会是DES加密算法的上百倍,因此便有人提出了快速指数算法。
这个算法在ACM比赛中算是基本算法之一,同样这也是我密码学期末考试第8项。
二、快速指数算法
假如我们需要计算 22^17 = ? mod 3323 应该如何运用快速指数算法呢?
1、设a = 22,k = 17
将k改写成二进制 k = 10001 = b0*x^0+b1*x^1+b2*x^2+b3*x^3+b4*x^4
2、创造 A 表
A0 = a^1 = 22 (mod 3323)
A1 = (a^1)^2 = a^2 = A0^2 = 484 (mod 3323)
A2 = (a^2)^2 = a^4 = A1^2 = 1480 (mod 3323)
A3 = (a^4)^2 = a^8 = A2^2 = 1659 (mod 3323)
A4 = (a^8)^2 = a^16 = A3^2 = 998 (mod 3323)
...
3、快速指数运算
a^k = A0^b0 * A1^b1 * ... * A4^b4
22^17 = (22^1) * (484^0) * (1480^0) * (1659^0) * (998^1) = 22 * 998 (mod 3323) = 2558