Алгоритм шифрования RSA в Java: нет BigIntegers - PullRequest
5 голосов
/ 21 мая 2011

Мне нужно реализовать алгоритм RSA в Java.Я нашел лучшее решение, используя BigIntegers, проблема в том, что мне нужно работать только с целыми или длинными.Шифрование выполняется следующим образом: M[i]^e mod n, где M [i] - символ ввода, а e - значение ключа.Я попытался использовать коды символов ASCII, и с кодами, такими как 115 и 116, я быстро выхожу из диапазона.Как я могу решить проблему?Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 21 мая 2011

Вы можете взглянуть на модульное возведение в степень .Таким образом вы преодолеете большинство переполнений в своих вычислениях.

1 голос
/ 21 мая 2011

Чтобы уточнить немного ...

(a * b) mod m == ((a mod m) * (b mod m)) mod m

Если вы помните из базовой математики,

a ^ 10 = (a ^ 5) * (a ^ 5)

Итак, вы можете разделить свои сумасшедшие высокие силы на более низкие, а затем взять модуль их значения (таким образом, сохраняя значение небольшим), а затем рекомбинировать их:

Too Big!         = Just Right!
(2 ^ 20) mod 113 = (((2 ^ 10) mod 113) * ((2 ^ 10) mod 113)) mod 113

Я не знаю, считается ли это «отдачей», но у моих учеников были проблемы с этим однажды, и у меня не было проблем с показом им этого трюка. Кроме того, я предполагаю, что это больше упражнение в рекурсии, чем что-либо еще.

...