test0414

解码

gcd (x, n) = 1

=> gcd(x^c, n) = 1

=> gcd(x^c % n, n) = gcd(x^c, n) = 1

=> gcd(m, n) = 1

符合欧拉定理的条件,

=> m ^ φ(n) ≡ 1 (mod n)

=> if (k·c ≡ 1 (mod φ (n)) ), m ^ (k·c) ≡ m (mod n)

=> x = m ^ k

所以只需要求出φ(n), k

又有 n = p * q, 且 p、q均为质数,

所以φ(n) = (p - 1) *(q - 1), 只需求出 p、q、k

由于p、q均为奇素数, 那么可以表示为以下形式 :

p = s - a, q = s + a

那么 n = (s - a) * (s + a) = s^2 - a ^ 2

所以只需要找到一个最小的、与 n 的差值为平方数的平方数就可以求出p、q了

而 k, 则可以通过 k · c ≡ 1 (mod φ(n)), 用ex_gcd求解

然后在通过 m ^ k 求解 x 时要用快速乘

 

猜你喜欢

转载自www.cnblogs.com/-wxyz/p/12708875.html
今日推荐