Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Нестандартное умножение по модулю

Ответить
Настройки темы
.NET - Нестандартное умножение по модулю

Пользователь


Сообщения: 107
Благодарности: 9


Конфигурация

Профиль | Цитировать


Изменения
Автор: Sidewalker
Дата: 21-10-2012
Часть реализации шифра.

В общем ТЗ: умножение по модулю 2^16+1 = 65537, причем вместо числа, равного нулю, используется 2^16.
Constants.decip_mod = 65537;
Constants.fyui = 65536;
Constants.one = 65535;

Как сделано в одном источнике (я не могу понять что к чему тут, разъясните пожалуйста полностью):

Код: Выделить весь код
long p;
long q;
		if(a==0) p = Constants.decip_mod - b;
		else
		    if(b==0) p=Constants.decip_mod - a;
		    else {
		        q = a * b;
		        p = (q & Constants.one) - (q>>16); // & = битовое логическое умножение  
		        if(p<=0) p = p + Constants.decip_mod;
		         }
	return (long)(p&Constants.one);
Как делаю я:

Код: Выделить весь код
if (a == 0) a = Constants.fuyi;
if (b == 0) b = Constants.fuyi;
p = ((a * b) % (Constants.decip_mod));
return p;
Что я делаю не так? (при использовании моего способа вся программа в итоге выдаёт неверный результат, при использовании первого - верный, НО на тестовых (написаны в описании алгоритма шифра) значениях a=2^16 и b=2^15 мой способ работает верно, впрочем как и первый способ - оба выдают 2^15+1).

И ещё: в одном месте находил этот исходник с парой комментариев, один из них был как раз к этой функции:
multiplication using the Low-High algorithm.

Отправлено: 22:51, 21-10-2012

 

Пользователь


Сообщения: 107
Благодарности: 9

Профиль | Цитировать


Для теста сделал

Код: Выделить весь код
for (int i = 0; i < 999; i++)
{
for (int j = 0; j < 999; j++)
{
if (mymul(i,j)!=mul(i,j)) Console.WriteLine("i: {0}, j: {1}, mymul: {2}, mul: {3}", i,j,mymul(i,j), mul(i,j));
}
}
сравниваю результаты своей функции и той функции, если не совпадают то вывожу аргументы и результаты

Последний раз редактировалось Sidewalker, 25-02-2013 в 15:26.


Отправлено: 23:04, 21-10-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 107
Благодарности: 9

Профиль | Цитировать


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;
    if (b == 0) b_ = Constants.fuyi; else b_ = b;
    p = ((a_ * b_) % (Constants.decip_mod));
    if (p == Constants.fuyi) p = 0;
    return p;
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:42, 21-10-2012 | #3


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вопрос: Какими судьбами ты с таким алгоритмом столкнулся? Не для реализации алгоритма IDEA случайно?

Отправлено: 14:39, 27-12-2014 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - Нестандартное умножение по модулю

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
вопрос по модулю памяти simsa Материнские платы и память 4 30-08-2011 01:53
Assm - Умножение матриц svdanik Программирование и базы данных 1 03-07-2011 00:15
Умножение в Excel Gue st Хочу все знать 24 13-12-2008 01:46
Вопрос по модифицированному модулю 7z r0L1K Автоматическая установка Windows 2000/XP/2003 2 12-12-2008 11:26
Массовое умножение в Excel ANDRY Хочу все знать 3 29-04-2003 13:58




 
Переход