Нестандартное умножение по модулю
Часть реализации шифра.
В общем ТЗ: умножение по модулю 2^16+1 = 65537, причем вместо числа, равного нулю, используется 2^16. Constants.decip_mod = 65537; Constants.fyui = 65536; Constants.one = 65535; Как сделано в одном источнике (я не могу понять что к чему тут, разъясните пожалуйста полностью): Код:
long p; Код:
if (a == 0) a = Constants.fuyi; И ещё: в одном месте находил этот исходник с парой комментариев, один из них был как раз к этой функции: multiplication using the Low-High algorithm. |
Для теста сделал
Код:
for (int i = 0; i < 999; i++) |
multiplication of integers modulo 2^16+1 where the subblock is treated as the usual radix-two representation of an integer except that the all-zero subblock is treated as representing 2^16.
Видимо имелось в виду, что ПОСЛЕ умножения и взятия по модулю возвращаемое значение p, если оно равно 2^16, надо перевести в 0 (т.е. в обратную сторону уже). Теперь работает. Ох уж эти америкосы, так сложно пообширней написать чтобы понятно было. Код:
if (a == 0) a_ = Constants.fuyi; else a_ = a; |
Вопрос: Какими судьбами ты с таким алгоритмом столкнулся? Не для реализации алгоритма IDEA случайно?
|
Время: 04:39. |
Время: 04:39.
© OSzone.net 2001-