Здравствуйте, Вадим.
Вы писали 2 марта 2005 г., 22:24:35:
> Hello Максим,
> Wednesday, March 2, 2005, 7:58:38 PM, you wrote:
>>> Штука в том, что mod "не расчитан" на тип extended - он же не
>>> целочисленный. Тут даже говорить об остатке неверно чисто
>>> математически. Но думаю, делу можно помочь, земенив деление сложением
>>> и вычитанием. Рассмотрим такой алгоритм. Пусть есть делимое A и
>>> делитель B. Возьмем число С, присвоим ему стартовое значение B и будем
>>> увеличивать С на число B до тех пор, пока очередная порция С+B не
>>> превзойдет А. Тогда А-С даст нужный остаток.
>>> ..................
>>> var
>>> a,b,c :Extended;
>>> begin
>>> .......................
>>> c := b;
>>> while c+b <= a do
>>> c := c + b;
>>> ..............
>>> Result := a - c; // "воображаемый" результат
>>> end;
М>> Большое спасибо за помощь, Вадим. У вас, да и у других, кто читал мои
М>> письма наверное сложилось неверное
М>> впечатление обо мне из-за небольшой моей неточности: я не собирался
М>> применять функцию mod для нахождения остатка от деления нецелых чисел. Мне
М>> необходимо оперировать с целыми аргументами, которые по длине
М>> превышают все типы данных, и к extended они относятся лишь потому, что
М>> входят в диапазон его допутимых значений, но они целые. Как я говорил
М>> раньше, я проектирую криптосистему на основе RSA, а как известно,
М>> криптостойкость RSA зависит от длины модуля и длины ключей, то есть
М>> чем больше модуль, тем лучше будет криптосистема. И в дальнейшем, у меня
М>> появится необходимиость оперировать с чилами, превышающими по длине
М>> все типы данных в Паскале. Мне подсказали, что для этого необходимо
М>> представлять эти числа в программе с помощью массивов. Не могли бы вы
М>> подробнее рассказать об этом. Заранее спасибо.
> Вопрос, который мне непонятен (сразу говорю, что в криптографии я -
> баран): каким образом Вы храните эти самые "очень большие" числа,
> если они не "вписываются" в имеющиеся типы? Или такие числа должны
> получаться в результате операций над более "простыми" числами? Вопрос
> отнюдь не риторический и вот почему: при использовании массивов само
> число должно быть куда-то записано, чтобы разложить его на разряды и
> значение каждого разряда записывается в i-ый элемент массива, если
> только я правильно понимаю эту идею, а переменную мы для этого числа
> опять-таки не можем - замекнутый. Хотя сама идея правильна.
> Я же возвращаюсь к своему первому по этой теме письму - нельзя ли
> хранить все эти числа в виде строк, например:
> '13762890937893478956903896'
> +
> '6789478324798686'
> Во-первых, это дает практически неограниченную "велечину" числа, а
> во-вторых, к строкам можно применить алгоритм, описанный выше, немного
> его доработав. Платой за это может быть лишь потери скорости
> обработки.
> Если Вам это не покажется бредом, могу привести полный алгоритм.
> Пишите.
Криптография штука очень тяжелая, так что я тоже мало что понимаю в
ней. Да мне много и не надо, я стараюсь как можно тщательнее изучить
алгоритм шифрования RSA, который считается одним из самых надежных, во
всяком случае пока. И его основной "конек" работа с большими числами,
а точнее однонаправленные функции (one-way functions), обрабатывающие
эти числа. Обратные этим функциям очень сложны в выполнении. Например
оновной проблемой по взлому RSA является факторизация (разложение на
простые множители) модуля, длина которого при нормальной реализации
тысячи бит. Конечно же во время выполнения алгоритма для
криптостойкости необходимо оперировать с очень большими числами. Самый
простой пример-это вычисление модуля, который является произведением
двух простых чисел длиной не менее 512 бит. Впрочем, вопрос не в
криптографии. Если у вас будет возиожность и желание, то советую
почитать книгу Б. Шнайера "Основы криптографии", очень интересная
штука. Мне товарищ Grishka передал исходники для работы с длинными
числами, за что ему честь и хвала. Помогите пожалуйста с размещением
чисел в массивах и с операциями над ними.