gpt4 book ai didi

java - 我怎样才能快速 ((A^z1 * y^z2) mod P) mod Q

转载 作者:行者123 更新时间:2023-11-30 08:25:17 27 4
gpt4 key购买 nike

BigIntegerValue.pow(IntegerValue)

Java 上的指数是整数,但我有 Biginteger 值。

我曾尝试验证签名 GOST 3410,我得到了这个代码 pow,但它太长了..

有人知道吗?为了获得 P 和 Q,我使用了 bouncy CaSTLe.. 但我不知道如何在 bouncy caSTLe 上进行验证,因为不知道如何查看值.. 谢谢。

    public static BigInteger pow_manual(BigInteger x, BigInteger y) {
if (y.compareTo(BigInteger.ZERO) < 0) {
throw new IllegalArgumentException();
}
BigInteger z = x; // z will successively become x^2, x^4, x^8, x^16, x^32...
BigInteger result = BigInteger.ONE;
byte[] bytes = y.toByteArray();
for (int i = bytes.length - 1; i >= 0; i--) {
byte bits = bytes[i];
for (int j = 0; j < 8; j++) {
if ((bits & 1) != 0) {
result = result.multiply(z);
}
// short cut out if there are no more bits to handle:
if ((bits >>= 1) == 0 && i == 0) {
return result;
}
z = z.multiply(z);
}
}
return result;
}

最佳答案

您可以使用特别设计 modPow BigInteger 类的方法

  ((A^z1 * y^z2) mod P) mod Q == ((((A^z1) mod P) * ((y^z2) mod P)) mod P) mod Q

你可以这样说

  BigInteger A = ...
BigInteger y = ...
BigInteger z1 = ...
BigInteger z2 = ...
BigInteger P = ...
BigInteger Q = ...

BigInteger result = (A.modPow(z1, P).multiply(y.modPow(z2, P))).mod(P).mod(Q);

关于java - 我怎样才能快速 ((A^z1 * y^z2) mod P) mod Q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22284672/

27 4 0
文章推荐: javascript - 需要增加或减少
文章推荐: Java-获取位置n的小数
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com