Модуль с большими числами в Java - PullRequest
0 голосов
/ 13 января 2019

Я программирую прототип расшифровки RSA в Java. Это просто для того, чтобы показать, как это работает для школы, поэтому я стараюсь сделать это как можно проще. Но когда я добираюсь до части расшифровки, я должен использовать формулу:

c = m ^ e% n.

В целях тестирования я пытался сделать это с m = "1010" (потому что я получаю его как строку из моей программы), e = 55 , n = 361 . Это должно дать мне 345 как с (проверено в калькуляторе Windows). Результаты, которые я получаю:

Math.pow(Integer.parseInt("1010"), 55) % 361 // 115.0

BigDecimal b = BigDecimal.valueOf(Math.pow(Integer.parseInt("1010"),55));

(b.remainder(BigDecimal.valueOf(361))).doubleValue() // 300.0

Math.pow(Integer.parseInt("1010"), 55) % 361 //  340

Пожалуйста, скажите мне, где я не прав или как я могу это исправить. Заранее спасибо.

1 Ответ

0 голосов
/ 13 января 2019

Я предлагаю использовать BigInteger, в этом случае будет полезно знать, что возведения в степень могут привести (в большинстве случаев) к переполнению. Здесь я пришел с приложением вашего примера, используя BigInteger, я надеюсь, что это поможет:

 BigInteger m  = BigInteger.valueOf(1010);
 BigInteger e  = BigInteger.valueOf(55);
 BigInteger n  = BigInteger.valueOf(361);
 BigInteger c = m.modPow(e,n);
 System.out.println(c); 
...