作为我的一项大学任务的一部分,我被要求编写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部分?
非常感谢任何帮助!
答案 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的编译器不会了解您希望代码执行的操作。这需要人脑才能做到。