复制BigInteger

时间:2018-05-08 22:15:54

标签: java arrays byte biginteger

作为我的一项大学任务的一部分,我被要求编写RSA算法来加密用户信息。我的加密代码在这里:

BigInteger byte_message = new BigInteger(user_message.getBytes());
BigInteger encrypted_message = byte_message.modPow(public_key, modulus);

然后对于解密,我的代码目前是:

BigInteger cipher = new BigInteger(encrypted_message);
BigInteger decrypted_message = cipher.modPow(private_key, modulus);

Java向我抛出的错误是:

**The constructor BigInteger(BigInteger) is undefined. 
1 quick fix available: Change type of 'encrypted_message' to 'byte[]'**

如何将encrypted_message从bytes转换为BigInteger,以便我可以运行代码的modPow部分?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

encrypted_message已经是BigInteger。没有必要从中构建new BigInteger,因为您只需将其分配给cipher

BigInteger cipher = encrypted_message;

另请注意,BigInteger(如String)是不可变的,因此(通常)没有理由创建一个等于您已有的新BigInteger实例。

答案 1 :(得分:1)

正如@pkpnd指出的那样,无需复制BigInteger引用的encrypted_message对象。简单分配参考就足够了。

在您实际需要执行此操作的(非常有限的)情况下,您可以按如下方式复制:

BigInteger cipher = new BigInteger(encrypted_message.toByteArray());

(他们没有提供BigInteger.clone()方法或BigInteger(BigInteger)构造函数,因为复制这些对象几乎总是不必要且效率低下。它们是不可变的。)

  

如何将encrypted_message从bytes转换为BigInteger,以便我可以运行代码的modPow部分?

你不需要。您已经在代码开始时完成了这项工作,并且您不需要再次执行此操作。 (如果你真的第二次这样做,那么就像你在代码开始时那样做!)

 1 quick fix available: Change type of 'encrypted_message' to 'byte[]'**

请注意,IDE建议的修复并不总是最好的建议。 IDE的编译器不会了解您希望代码执行的操作。这需要人脑才能做到。