Здравствуйте! Очень нужна помощь в написании небольшой программы с большими числами. Необходимо реализовать протокол аутентификации Фейге-Фиата-Шамира, используя длинные ключи. Нашла в инете реализацию цифровой подписи на основе данного протокола с использованием библиотеки ‘lip.h’ (работа с длинными числами, модулярная арифметика), обрадовалась, увидя процедуру генерации ключей, но, начав разбираться в коде поняла, что для цифровой подписи протокол несколько иной…
В протоколе аутентификации ФФШ секретный ключ формируется следующим образом: ищутся квадратичные вычеты по модулю n (n=p*q, где p и q – большие простые числа), далее находят их обратные значения опять же по модулю n, затем из получившегося множества выбирают k значений, из каждого значения извлекается квадратный корень по модулю n – получившийся вектор из k чисел и будет секретным ключом. В цифровой же подписи секретный ключ формируется иным образом. Вот и попала я в тупиковую ситуацию: на Си/Си++ ранее писать не приходилось, работала только на Делфи, поэтому каждый шаг дается пока с трудом, а тут такая головоломка… Не представляю даже каким образом можно реализовать генерацию секретного ключа, а именно нахождение квадратичных вычетов по модулю для длинного числа: осуществлять это перебором? наверное, займет много времени; как хранить найденное множество значений? ведь их будет очень много…
Библиотека, на первый взгляд, приличная, все функции снабжены кратким описанием, присутсвуют все необходимые операции модулярной арифметики: умножение, вычисление обратного значения, квадратного корня и т.д. Сама понимаю, что не справлюсь, поэтому буду очень рада помощи.
Прикрепляю проект с присоединенной библиотекой, ничего не выбрасывала из кода, хотя хэш-функция мне не нужна, а для начала только процедура FFS_gen_keys. Так же выкладываю описание самого алгоритма.
ffs.rar ( 408.75 килобайт )
Кол-во скачиваний: 647
k действительно отвечает за криптоскойкость, чем больше будет компонентов в секретном ключе, тем лучше , выбирается, видимо, из своих собственных соображений. Длина простых чисел p и q, с которых начинается алгоритм, должна быть не меньше 256 бит (опять же, чем больше, тем лучше).
Квадратичные вычеты по модулю n, если использовать способ простого перебора, находятся следующим образом: берутся все целые числа, меньшие n, начиная с единицы, возводятся в квадрат по модулю n, получившиеся остатки и есть искомые квадратичные вычеты. Они могут повторятся. Различных значений должно быть ровно (p-1)*(q-1)/4. Но есть одно существенное "НО": для формирования секретного ключа берутся обратные значения по модулю n для квадратичных вычетов, а не для каждого числа существует обратное значение по модулю n, а именно не существует таких обратных значений для чисел, которые не являются взаимно простыми с n. Поэтому нельзя взять произвольно k целых чисел < n, возвести их в квадрат и найти остаток, так как длина ключа может получиться меньше нужной....
Добавлено через 15 мин.
Ой, сначала не так поняла идею про k . Наверное, хорошая идея, искать не всё, а только пока не наберется k квадратичных вычетов, имеющих обратные значения по модулю n.
*kitty*, ты хитрая лиса )), если ты все знала - зачем спрашивала?
Эх, если бы я могла сама написать, не обращалась бы за помощью...
*kitty*, понимаешь, в чем дело... Этих реализаций - полно на каждом шагу. Уж FFS найти - вообще не проблема. Поэтому и не хочется реализовывать то, что уже сделано.
Я бы на твоем месте взял готовую реализацию (если надо - прикреплю сюда PDF-файл, описывающий детали реализации, и содержащий сами исходные коды программы, правда, оно всё по-английски. И еще одно: там для работы с длинными числами используется библиотека GMP), и разобрался бы с ней. Поверь, толку будет больше, чем пытаться сделать то же самое с нуля, тыкаться туда, сюда, и ничего в итоге не продвигается... А когда разберешься - можешь уже и написать все с нуля сама, с использованием LIP.H (так сказать, для закрепления материала )
Нужен PDF?
Я уже нашла этот pdf (кстати, это единственная реализация этого протокола, который я нашла в сети, а искала долго), но там другая проблема, никак не могу подсоединить эту библиотеку, она написана под Линакс, есть сборки под ХР, но там какае-то сложности подключения все равно... вообщем не получается.
Вы не работали с этой библиотекой? Может у кого-то получилось её подключить и использовать в Билдере Си++?
Получалось... Вот тут: http://forum.sources.ru/index.php?showtopic=272074 Adil рассказывал что надо делать для подключения GMP к Билдеру. Даже тестовые проекты выкладывались...
Спасибо, буду пробовать
Написала протокол с использованием библиотеки "lip.h" в консольном режиме, работает. Теперь нужно реализовать это в визуальном режиме. Создала новый проект с формой, перенесла в папку с проектом файлы "lip.c", "lip.h", добавила в проект. В обработчике кнопки попробовала вызвать библиотечные функции, проект компилируется, но линковщик выдает ошибки по всем функциям:[Linker Error] Unresolved external 'zrandomb(long *, long * *)' referenced from F:\FFS_VLC\MAINUNIT.OBJ
[Linker Error] Unresolved external 'zrandomprime(long, long, long * *, void (*)(long *, long * *))'
referenced from F:\FFS_VLC\MAINUNIT.OBJ
[Linker Error] Unresolved external 'zswrite(char *, long *)' referenced from F:\FFS_VLC\MAINUNIT.OBJ
Подскажите, пожалуйста, как это исправить?
Прикрепленные файлы
FFS_vlc.rar ( 500.87 килобайт )
Кол-во скачиваний: 313
#include <mem.h>
#include <stdio.h>
#include <stdlib.h>
// Указать явно, что LIP написана на чистом С:
extern "C"
{
#include "lip.h"
}
#include "MainUnit.h"
Спасибо, помогло
Здравствуйте, по ходу реализации возникла ещё одна проблема:
из формы Form1 нажатием кнопки вызывается форма Form3->Show(). Далее, при нажатии кнопки на Form3, в Memo1 на Form1 должна выводится некоторая информация. Необходимо чтобы обе форме оставались на экране, было переключение между этими формами, то есть вызывать Form3->ShowModal() нельзя.
Подскажите, пожалуйста, как её разрешить.
Form1->Memo1->Lines->Add(AnsiString(str) + ";");
Не знаю, на тестовом проекте у меня прекрасно отработало заполнение Memo, расположенного на первой форме, по нажатию кнопки на форме третьей... Присоедини свой проект, надо видеть, что и как у тебя делается...
Да и правда, на тестовом и у меня заработало. Значит модули как-то соединены неправильно.... но не пойму, что не так, посмотрите, пожалуйста...
Прикрепленные файлы
Копия_FFS_v.rar ( 546 килобайт )
Кол-во скачиваний: 299
Хм... [ILINK32 Warning] Warning: Public symbol '_zn' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_zw' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_k' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_t' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_length' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_zs' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\MAINUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
[ILINK32 Warning] Warning: Public symbol '_zs' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\MAINUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_zv' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\MAINUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
[ILINK32 Warning] Warning: Public symbol '_zv' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\MAINUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_zs' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_zv' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
[ILINK32 Warning] Warning: Public symbol '_Form3' defined in both
module F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\ALICEUNIT.OBJ
and F:\PROGRAMS\BDS\FFS_V2\DEBUG_BUILD\TRUSTEDCENTER.OBJ
И тебя даже ТАКИЕ предупреждения линкера не заставили задуматься, что что-то не так? Напрасно. На подобные вещи нужно всегда обращать внимание...
Теперь о том, что именно не так: А вот это:
#include "AliceUnit.h"
#include "TrustedCenter.h"
#include "MainUnit.cpp"
#include "TrustedCenter.h"
#include "AliceUnit.cpp"
Добрый день! Возникла ещё одна проблема: как сделать так, чтобы при запуске ехе-файла на других компьютерах формы приложения не меняли свои размеры, и компоненты (а именно надписи и вставленные картинки с формулами), расположенные на них, оставались на своих местах?
(И ещё почему-то пропали установленные мною цвета у GroupBox, стали просто серыми... )
Вернее, не форма меняет размеры, а окно показывает только часть формы с прокруткой, а не всю форму.
Можно присоединить проект (или какую-то его часть, которая воспроизводит проблему)? И заодно уточнить, есть ли принципиальные отличия между этими разными компьютерами. Точнее - между установками ОС. Еще точнее - например, на одной машине установлена дефолтная тема (которая по умолчанию в XP, синяя), а на другой - классическая тема?
Кстати, насколько разные ОСи на машинах? Это тоже важно: то, что работает на XP может при определенных условиях не так отработать на "Семерке", примеры уже были на форуме.
Я забыла, наверное, самое главное уточнить (а слона то я и не заметила... ). Из-за того, что были проблемы с vcl60.bpl, пробовала запускать после только на машинах, на которых НЕ установлен Borland C++ Builder. Может именно из-за этого проблемы с цветом?
На рабочем компьютере, на котором делала проект, ХР Service Pack 2 (нелицензионная), тема "Windows XP (изменено)".
Запускала на домашнем ноуте, XP Service Pack 3 (лицензионная), тема "Измененная".
И ещё у друга, XP Service Pack 3 (нелицензионная), тема "Классическая" .
Присоединяю проект просто с формой, которая искажается на других компьютерах, а именно:
1) пропадает голубой цвет "clInactiveCaptionText", установленный у компонента "GroupBox1" (фон картинок с формулами подобран также под этот цвет);
и, соответственно, у компонента "GroupBox2" пропадает серый цвет "clActiveBorder";
2) при запуске отображается не вся форма, а только её часть в окне с прокруткой, то есть приходится вручную подгонять размер окна приложения под форму;
3) часть компонентов смещается друг относительно друга, из-за этого продает (не видна) часть текста, что вообще очень плохо
Цвета, конечно, не так страшно, что пропадают, можно обойтись и цветом по умолчанию, а вот сдвиг компонентов нужно как-то исправить. Можно ли как-то зафиксировать их на форме, чтобы такого не происходило? ну и чтобы форма открывалась целиком без прокрутки?
_____.rar ( 368.44 килобайт )
Кол-во скачиваний: 496
for(int i = 0; i < Form1->ComponentCount; i++), но "зачем откладывать на RunTime то, что можно сделать в DesignTime-е?" (почти цитата)
{
TRichEdit *RE = dynamic_cast<TRichEdit*>(Components[i]);
if(RE)
{
RE->ParentColor = True;
}
}
void __fastcall TForm1::FormCreate(TObject *Sender). И проблема решена.
{
// Вместо Image4 может быть любое изображение, лежащее на GroupBox1
GroupBox1->Color = Image4->Picture->Bitmap->Canvas->Pixels[0][0];
// аналогично, тут можно использовать любое изображение лежащее на GroupBox2
GroupBox2->Color = Image3->Picture->Bitmap->Canvas->Pixels[0][0];
}
С цветами проблему исправила , спасибо
На рабочем компьютере расширение 1280 на 1024, но ноуте - 1680 на 1050.
Прикрепляю изображения того, что происходит с формами при запуске на ноуте:
- одна форма:
1) как должно быть: 2) в каком виде открывается: 3) искажения компонентов:
- вторая форма:
1) как должно быть: 2) в каком виде открывается: 3) искажения компонентов:
Очень интересно. Разрабатывается форма при меньшем разрешении, но при запуске на большем - не отображается полностью. Почему тогда при запуске на разрешении 1920*1080 такого не происходит, и форма отображается совершенно нормально? Неужели дело в версии Билдера?
Попробуй последовать совету, приведенному по ссылке - установи вместо Verdana шрифт Arial, и измени свойство Position формы на poDesktopCenter или на poScreenCenter (это заставит форму отображаться в центре экрана, что возможно решит проблемы с полосами прокрутки)...
Теперь еще один вопрос: а почему, собственно, ты делаешь такую гремучую смесь, как кусок предложения - в RichEdit-е, потом формула - в Image, потом опять RichEdit? Я бы на твоем месте поступил по-другому: набрал бы содержимое каждого из пунктов 1), 2), 3), 4) в отдельном DOC или RTF-файле (прямо вместе с формулами), и вместо TRichEdit+TImage использовал бы один-единственный TOleContainer для каждого пункта (весь абзац имеет смысл только в случае, если на компьютере, где запускается программа гарантированно установлен MS Office. Если нет - то либо оставлять как есть, либо полностью весь пункт, а не только формулу, переводить в изображение и вместо RichEdit+Image пользоваться одним Image).
Но сначала - измени Position и шрифты. Кстати, как вариант - попробуй еще запретить изменение размеров формы (Border установить в bsSingle).
P.S. Кстати, похоже, что дело действительно в версии компилятора: если я запускаю твой EXE-шник, и уменьшаю размер формы вручную, то я получаю эти самые полосы прокрутки. А когда перекомпилирую проект у себя (ничего не изменяя) и пытаюсь уменьшить размер формы - то никаких полос прокрутки уже нет, форма просто уменьшается в размерах, и все, что осталось за ее новыми границами - просто невидимо. Так что тут важно работать с той же версией Билдера, что и у тебя.
Скрины не смотрел - не могу пока, браузер в VGA режиме (640 на 480 при 16 цветах) картинки не показывает, а других режимов нет - дрова слетели, но если по поводу полос прокрутки по краям формы, то у формы 1 у свойств VertScrollBar и HorzScrollBar выставлено Visible в false?
От них зависит наличие полос прокрутки при изменении размеров.
А в BCB6 что, у этих свойств какое-то другое, отличное от 2009-го Билдера значение? Почему ТАМ полосы появляются, а ЗДЕСЬ - нет, хотя я написал, что ничего не менял.
P.S.
Cialis Vendita Pillole
Mexico Drugs Online
Clomid Absence Ovulation
Your writings and news are really interesting to me. There are numerous advantages to the contents. Thank you so much. My site:: https://www.chokdeebacarrat.com/ole777/
Why not settling on games that is fun and at the same time your earning. Well itll make suspense because of the game as well but dude just try it and it gave me hope while pandemic is real rn. https://worldnewsite.com/what-can-you-do-in-10-minutes/
As a Newbie, I am continuously exploring online for articles that can benefit me. Thank you.
https://bangkokgoguide.com
Добавлено через 15 мин.
As a Newbie, I am continuously exploring online for articles that can benefit me. Thank you.
https://zrpoker.com