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

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

Заголовок и текст вашего вопроса не совпадают. В заголовке сказано, что вы спрашиваете о преобразовании байтового массива в BigInteger. В теле вы четко знаете, как это сделать, и на самом деле спрашиваете, как сделать копию BigInteger. Я исправил это.

Stephen C 09.05.2018 00:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
159
2

Ответы 2

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

BigInteger cipher = encrypted_message;

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

Да, но если я сделаю это, а затем сделаю: BigInteger decrypted_message = cipher.modPow (private_key_file, modulus); System.out.println ("Расшифрованное сообщение = " + decrypted_message); Вывод не совпадает с моим исходным сообщением.

James Kemp 09.05.2018 00:20

@JamesKemp Тогда это должна быть несвязанная ошибка в вашем коде. Если ваша цель для линии BigInteger cipher = new BigInteger(encrypted_message); состоит в том, чтобы cipher был BigInteger, равным encrypted_message, то cipher = encrypted_message - правильный подход для этой линии.

pkpnd 09.05.2018 00:23

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

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

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

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


How do I convert the encrypted_message from bytes to BigInteger so that I can then run the modPow section of my code?

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

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

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

Другие вопросы по теме