Прежде чем опубликовать свой код, я считаю, что лучше всего сначала создать пару вещей.Хранение больших чисел для шифрования RSA в java
Цель:
Выполните очень простой шифрования RSA на пару небольших количествах. Для тех из вас, кто знаком с RSA-шифрованием, я разместил значения, используемые для приведенного ниже алгоритма.
Текущий RSA номера/значения:
Р = 29
Q = 31
N = P * Q
Фи = ((P-1) * (Q -1))
Е = 11
Моя проблема:
Проблема возникает, когда я пытаюсь расшифровать свой код. Шифрование работает так, как было разработано.
Код:
long[] mesg = new long[]{8, 7, 26, 28};
long[] encrypted_mesg = new long[mesg.length];
for(int i=0; i<mesg.length; i++){
encrypted_mesg[i]=(long)((Math.pow(mesg[i],E))%N);
System.out.print(encrypted_mesg[i] + " ");
}
System.out.println();
//Decrpyt (not functioning-long to small, Big Integer not working)
for(int j=0; j<encryp_mesg.length; j++){
BigInteger decrypt = new BigInteger(Math.pow(encryp_mesg[j],D) + "");
System.out.print(decrypt.toString() + " ");
}
Первоначальная проблема заключалась в том, что D (частный показатель), когда применяется в качестве показателя, был путь к большим долго. Я сделал быстрый поиск Google и решил попробовать BigInteger. Когда я запускаю программу, он выдает эту ошибку:
Exception in thread "main" java.lang.NumberFormatException: For input string: "Infinity"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.math.BigInteger.<init>(BigInteger.java:461)
at java.math.BigInteger.<init>(BigInteger.java:597)
at RSA_Riddles.main(RSA_Riddles.java:23)**
То, что я пытался решить эту проблему:
Чтобы быть честным, я не пробовал на самом деле ничего, потому что я знаю, что ответ не вычислить до бесконечности, но BigInteger думает, что это так. Есть ли в любом случае, что я могу хранить число, такое как 130^611? Если да, то как?
Большой вопрос:
Как я могу хранить значения, необходимые для выполнения дешифрования?
Благодарим вас за любого, кто попытается мне помочь!
Я не знаю, если это дизайн или удача, вы проверяете только значения до 28, когда ваш расчет шифрования приводит к неправильному результату для большинства значений от 29 до. Также расшифровка sigould аналогично будет mod n: m = c^d mod n , Кроме того, делать exponentiate и modulo по отдельности едва ли практично для вашего размера игрушки, но делать это для безопасных размеров займет гораздо больше времени, чем ваша жизнь (или ваш компьютер), поэтому фактические реализации чередуют их, как объяснено в Википедии, среди других, а затем для игрушек размер вам вообще не нужен. –