Java中的模块化指数

Car*_*gen 5 java math exponentiation dsa modulus

我需要一种计算方法:

(g^u * y^v) mod p
Run Code Online (Sandbox Code Playgroud)

在Java中.

我发现这个算法用于计算(g ^ u)mod p:

int modulo(int a,int b,int c) {
    long x=1
    long y=a;
    while(b > 0){
        if(b%2 == 1){
            x=(x*y)%c;
        }
        y = (y*y)%c; // squaring the base
        b /= 2;
    }
    return (int) x%c;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我似乎找不到办法做到这一点

(g^u * y^v) mod p
Run Code Online (Sandbox Code Playgroud)

因为我的数学技能乏善可陈.

把它放在上下文中,它是用于"减少"DSA的java实现 - 验证部分要求解决它.

Chr*_*ann 9

假设这两个因素不会溢出,我相信你可以用这种方式简化表达式:

(x * y) mod p = ( (x mod p)*(y mod p) ) mod p.我相信你可以从那里弄明白.