在Java中创建Alice的私钥(幂模)



我开始了一项任务,但似乎无法解决它。Alice公钥的答案应该是21,但我不确定我做错了什么。我尝试使用double,但答案是一样的(426(。

public class DiffieHellman {
// Main method to call
public static void main(String[] args) {
// Shared values
int p = 941;
int g = 627;
alicePrivateKey(p, g);
bobPrivateKey(p, g);
}
// Generate alice key
private static void alicePrivateKey(int p, int g) {
int alicePrivateKey = 12;
System.out.println("Prime: " + p);
System.out.println("Base: " + g);
System.out.println("Alice Private Key: " + alicePrivateKey);
System.out.println("Alice Public Key: " + Math.pow(g, alicePrivateKey) % p);
System.out.println();
}
}

输出

Prime: 941
Base: 627
Alice Private Key: 12
Alice Public Key: 426.0

如何将Alice公钥设置为21?有人能告诉我这件事吗?

Math.pow不适合如此大的数字,我建议您使用BigIntegers进行此类计算。

private static void alicePrivateKey(int p, int g) {
int alicePrivateKey = 12;
...
System.out.println("Alice Private Key: " + alicePrivateKey);

BigInteger gBigInt = BigInteger.valueOf(g).pow(alicePrivateKey);
BigInteger pBigInt = BigInteger.valueOf(p);

System.out.println("Alice Public Key: " + gBigInt.mod(pBigInt));
System.out.println();
}
Prime: 941
Base: 627
Alice Private Key: 12
Alice Public Key: 21

最新更新