我尝试使用using System.Numerics.BigInteger;
并使用负指数表示modPow,我阅读有关Exception的文档,这就是我做了一些技巧的原因
//a^(-x) mod n == (a^(-1))^x mod n
BigInteger tmp = BigInteger.ModPow(BigInteger.Divide(BigInteger.One, a),
secretKey, pCommon);
BigInteger resBigInteger = BigInteger.Multiply(b, tmp);
但是tmp是0.我怎么能解决这个问题?
答案 0 :(得分:1)
你的“伎俩”只会欺骗自己。除非BigInteger.Divide(BigInteger.One, a)
为1,否则a
几乎总是为零。无论如何,这不是如何计算模块化逆。您必须实现扩展欧几里德算法,或者,如果您具有pCommon
的完全因子分解,则可以计算a
Φ(pCommon) - 1 == a
-1 mod pCommon
,其中Φ(n)是euler totient function。