我怎麼能在這條巨蟒一樣的效果(使用SAGE)代碼:的BigInteger冪與負數
def elGamalDecrypt(c1, c2, p, x):
return Mod(c2*c1^(-x),p)
與標準的Java 7庫?所有數字都是BigInteger
。
我試了很多都沒有用。在Python中它非常簡單而且FAST。
我怎麼能在這條巨蟒一樣的效果(使用SAGE)代碼:的BigInteger冪與負數
def elGamalDecrypt(c1, c2, p, x):
return Mod(c2*c1^(-x),p)
與標準的Java 7庫?所有數字都是BigInteger
。
我試了很多都沒有用。在Python中它非常簡單而且FAST。
在Java 7中BigInteger類有一個modPow
方法,它處理模冪。所以,像下面應該工作(雖然我沒有測試過):
c2.multiply(c1.modPow(x.negate(), p)).mod(p)
的modPow
方法將只接受一個負指數-x
如果c1
和p
互質。 (該名稱p
表明p
是素數,如果c1
和p
不互爲素,c1
將整除p
,因此冪將毫無意義,所以我懷疑這會不會是一個問題。)
這也應該這樣做,因爲c2 * c1^-x = c2/(c1^x)
:
BigInteger elGamalDecrypt(BigInteger c1, BigInteger c2, BigInteger p, int x) {
return c2.divide(c1.pow(x)).mod(p);
}
? '^'在Python中是按位異或,不是冪指數;並且模數不需要函數,因爲'%'操作符就足夠了。 –
el gamal中的一個按位xor肯定是錯誤的。除非編譯器對指數+模數進行了一些特殊的優化,否則將它作爲單獨的操作編寫將會非常緩慢且佔用大量內存。 – CodesInChaos
當然,如果Java中缺少任何加密函數,您應該首先嚐試Bouncy Castle庫,它們當然會執行El-Gamal加密/解密。 –