Форум программистов, компьютерный форум, киберфорум
Криптография
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.11.2009
Сообщений: 44
1

Электронные деньги RSA

15.04.2017, 13:29. Показов 1389. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Пытаюсь реализовать алгоритм, но почему-то не сходятся подписи. Для простоты опустил хеш-функцию.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void MainWindow::start_DigitalCash(int choose){
   srand(time(NULL));
   long long P,Q,N,f,r,r1,n,n1,s,s1,s2,C[10],D[10]; int count1, index_money = 1;
   while(1) {
       while(1) { P = rand() % 30000; if (test_Ferma(P)==1) break;}
       cout<<endl;
       while(1) { Q = rand() % 30000; if (test_Ferma(Q)==1) break;}
       if ((P!=Q) && (P!=1) && (Q!=1)) break;
   }
   N = P*Q;
   f = (P-1) * (Q-1);
   for (int i=0;i<11;i++){ D[i] = 0; C[i] = 0; }
   for (int i=0;i<11;i++){
   while(1) {
   D[i] = ((rand()<<15) | rand()) % (f);
   if (evklid_nod(D[i],f)==1) { count1++; break;}
   }
   if (count1 == 11) break;
   }
   for (int i = 0; i < 11; i++) { C[i] = evklid_y(D[i],f);  if (C[i]<0) C[i] = C[i] + (f);}
   for (int i = 0; i < 11; i++) qDebug()<<i<<" "<<D[i];
   qDebug()<<endl;
   for (int i = 0; i < 11; i++) qDebug()<<i<<" "<<C[i];
 
   while (1) {
       r = (1+(rand()<<15) | rand()) % (N-1);
       if (evklid_nod(r,N)==1) break;
   }
   r1 = evklid_y(r,N); if (r1<0) r1 = r1 + N;
   n = 1 + rand() % N;
   n1 = ((n % N) * powMod(r,D[index_money],N)) % N;
   s1 = powMod(n1,C[index_money],N);
   s = (powMod(s1,1,N) * powMod(r1,1,N)) % N;
   // передаем n и s
   s2 = powMod(n,D[index_money],N);
   qDebug()<<"Подписи";
   qDebug()<<s1;
   qDebug()<<s2;
test_Ferma(P) - проверка числа на простоту, index_money - номер номинала, evklid_y - обобщенный алгоритм Евклида для нахождения инверсии числа, evklid_nod - НОД, powMod - быстрое возведение в степень по модулю.
Спасибо!

Добавлено через 10 минут
Дополнение:
Алгоритм Покупатель - Магазин - Банк.
Сравниваю s и s2. Если в конце проверять подпись через секретный ключ Банка ( C[index_money]) то всё корректно, а магазин то не знает секретный ключ банка, как я понял он довольствуется только открытым ключом D[index_money], вот тут не сходится. Или я чего-то не понимаю.
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.04.2017, 13:29
Ответы с готовыми решениями:

электронные тесты по высшей математике
не могу определиться на vb создавать эл.тесты по вышке или на delphi и тот и др не знаю практически...

Электронные деньги - WebMoney, Яндекс.Деньги отразить в расходах?
Приветствую! Общался с бухгалтерией говорят, что отразить электронные деньги в расходах нельзя...

Электронные деньги
Раньше всегда за работу брал webmoney, и все нормально: кидал на телефон на карточку Но один...

Как подростку снять электронные деньги?
Всем привет я тут недавно фрилансом заработал 100$ и теперь хочу просто попробовать вывести в реал...

0
15.04.2017, 13:29
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2017, 13:29
Помогаю со студенческими работами здесь

Как написать шифрование RSA на python без import RSA
Нужнен код без использование RSA библиотеки. Буду блогодарен!

Ошибка Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at pr4.RSA.main(RSA.java:44)
package pr4; import java.math.BigInteger; import java.security.SecureRandom; public...

Электронные таблицы
Реферат!! Применение электронных таблиц в оброзовании!

Электронные часы
В общем, над задачей я мучаюсь больше недели уже, новичок, вроде и понимаю все, но на этой -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
Как использовать RabbitMQ в C# .NET
bytestream 21.01.2025
RabbitMQ представляет собой мощный брокер сообщений, который эффективно решает эту задачу, обеспечивая надежную передачу данных между множеством приложений. Этот инструмент реализует протокол AMQP. . .
Как объединить последние коммиты в Git
bytestream 21.01.2025
В мире разработки программного обеспечения система контроля версий Git стала незаменимым инструментом для управления исходным кодом. Одной из наиболее полезных, но порой сложных для освоения функций. . .
Как запушить новую локальную ветку (branch) в удалённый репозиторий Git и отслеживать её
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемым инструментом для эффективного управления кодом и организации командной работы. Одной из ключевых. . .
Как создать директорию и все родительские директории, указанные в пути, с помощью Python
bytestream 21.01.2025
Python предоставляет мощные инструменты для работы с файловой системой через встроенные модули os и pathlib, которые значительно упрощают процесс манипуляции директориями. Эти модули содержат. . .
Как работать с массивами в JavaScript
bytestream 21.01.2025
Массивы в JavaScript представляют собой один из фундаментальных типов данных, который позволяет хранить упорядоченные коллекции различных элементов в одной переменной. Эта структура данных является. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru