微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java中创建Alice的私钥功率和模数

如何解决在Java中创建Alice的私钥功率和模数

我已经开始做作业,但似乎无法解决。对于Alice Public Key,答案应该是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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。