Создание копии BigInteger - PullRequest
0 голосов
/ 09 мая 2018

В рамках одного из моих университетских заданий меня попросили закодировать алгоритм 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 из байтов в BigInteger, чтобы я мог затем запустить раздел modPow моего кода?

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Как указывает @pkpnd, нет необходимости делать копию объекта BigInteger, на который ссылается encrypted_message. Достаточно простого присвоения ссылки.

В (крайне ограниченном) случае, когда вам действительно нужно это сделать, вы можете сделать копию следующим образом:

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

(Они не предоставили метод BigInteger.clone() или BigInteger(BigInteger), поскольку копирование этих объектов почти всегда не нужно и неэффективно. Они неизменны.)


Как мне преобразовать encrypted_message из байтов в BigInteger, чтобы я мог затем запустить раздел modPow моего кода?

Тебе не нужно. Вы уже сделали это в начале своего кода, и вам не нужно делать это снова. (И если вы действительно делаете это второй раз, то делайте это так же, как вы делали в начале кода!)

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

Обратите внимание, что исправления, предложенные вашей IDE, не всегда являются лучшим советом. Компилятор IDE не не понимает того, что вы собираетесь делать с кодом. Для этого нужен человеческий мозг.

0 голосов
/ 09 мая 2018

encrypted_message уже BigInteger. Нет необходимости создавать new BigInteger из него, потому что вы можете просто присвоить его cipher:

BigInteger cipher = encrypted_message;

Также обратите внимание, что BigInteger (например, String) является неизменным, поэтому (обычно) нет причин создавать новый экземпляр BigInteger, равный тому, который у вас уже есть.

...