乘法逆元的计算
? ? ? ? 計算乘法逆元是學習加密算法的基礎,在 RSA、ECC 和 AES 加密算法中都會用到,在網上提供的方法也有,比如擴展歐幾里德算法等,看了以后要根據它提供的示例去推導也是有困難的,關鍵是自己太渣了。以前以為加密算法的基礎是數學,后來才知道不是數學,而是數論。無路可逃啊!
乘法逆元的概念
? ? ? ?模 n 乘法逆元:對于整數 a、n,如果存在整數 b,滿足 ab mod n = 1,則說,b 是 a 的模 n 乘法逆元。a 存在模 n 的乘法逆元的充要條件是 gcd(a, n) = 1。
? ? ? ? 光看概念感覺不是太復雜,實際計算時還是有點繞,要找出一個給定 a 和 n 且能滿足 (a * b - 1) / n = 0?中的 b 多少還是有點難度的。至少我這么覺得吧。
乘法逆元計算的流程
? ? ? ?不過后來得到一個簡單的流程,根據流程計算還是相對比較容易的。流程如下:
(x1, x2, x3) <-?(1,?0, n); (y1, y2, y3) <- (0, 1, a)
如果 y3 = 0,返回 x3 = gcd(a, n) 無逆元
如果 y3 = 1, 返回 y3 = gcd(a, n);y2 = a ^ -1 mod n
Q = max_int(x3 / y3)
(t1, t2, t3) <-?(x1 - qy1, x2 - qy2, x3 - qy3)
(x1, x2, x3) <-?(y1, y2,y3)
(y1, y2, y3) <- (t1, t2, t3)
返回到 2
? ? ? ?在上面的流程中的 3 可以看出,如果 y3 等于 1,那么 y2 就是乘法逆元,如果 y2 是負數,那么需要把 y2 + n 后再 mod n,就可以得到 a 模 n 的乘法逆元了。
總結
- 上一篇: Ubuntu 快速 安装 Nginx +
- 下一篇: 给echarts折线图赋值