2015-05-04 29 views
0

如果我知道參數a,kp那麼如何在C#中計算此值?如何在C#中執行模乘和冪運算?

s=a*k^-1 mod p 

它用於加密目的,我是新的。如果問題不恰當,請不要感到生氣。

請注意,k^-1k (mod p)的模塊化反轉而非電源運營商。

+0

是** k^-1 **表示** k ** * mod p的模逆。 @ArtjomB。 – Leon

+0

'a','k'和'​​p'有多大?問題是int是否足夠或者需要BigInteger。 –

+0

'a,k和p'會和'long'變量一樣大。抱歉。 @ArtjomB。 – Leon

回答

2

由於問題是關於模塊化逆轉的問題,我認爲這將有利於求職者看另一個SO question。答案

關鍵的是 -

網4.0+實現的BigInteger用特殊的模塊化算術函數ModPow(產生「X動力y模Z」),你並不需要一個第三方庫模仿ModInverse。如果m是一個素數,所有你需要做的是計算:

在C#中按MSDN documentation這被定義爲

public static BigInteger ModPow(
    BigInteger value, 
    BigInteger exponent, 
    BigInteger modulus 
) 

利用這一點,我們可以做這樣的事情來計算k的逆模p 像

BigInteger bi= ModPow(k, -1, p); 
int b= (int) bi; 
s= (a* bi)%p; 
+1

使用'ModPow(k,-1,p)'將導致'ArgumentOutOfRangeException'被拋出,表明'指數是負數'。 [BigInteger.ModPow方法例外](https://msdn.microsoft.com/en-us/library/system.numerics.biginteger.modpow(v = vs.110).aspx#Anchor_1) –

-3

公共靜態雙DoMath(雙一,雙K,雙p)

{ 
     return (a * Math.Pow(k, -1)) % p; 
    } 
+0

'k^-1'是一個模數反轉,它與'Math.Pow(k,-1)'不同。 –