Русский / Russian English / Английский

Сейчас на форуме: _MBK_, SpawN3222 (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Программирование —› Пишем RSA криптографический алгоритм на языке Си
Посл.ответ Сообщение

Ранг: 2.1 (гость)
Статус: Участник

Создано: 30 сентября 2017 03:56 · Поправил: anonymous New!
Цитата · Личное сообщение · #1

Приветствую вас мои друзья,сегодня напишем маленькую программу.
Реализовать RSA криптографический алгоритм на языке Си.
Функцией testdist(),которая обЪединяет сложение и умножение с
помощью закона дистрибутивности.
Если p или q не простые,то ф(n)/=(p-1)(q-1).
Функции RSA будет работать корректно только если Ферма выдаст,что p и q вероятно простые.
Code:
  1. #include <stdio.h>
  2.  
  3. #include <stdlib.h>
  4.  
  5. #include "flintpp.h"
  6.  
  7. void report_error (LINT&,LINT&, LINT&,int);
  8.  
  9. void testdist (int);
  10.  
  11. #define MAXTESTLEN CLINTMAXBIT
  12.  
  13. #define CLINTRNDLN (ulrand64_l()% (MAXTESTLEN + 1))
  14.  
  15. main()
  16.  
  17. {
  18.  
  19.  testdist(1000000);
  20.  
  21. }
  22.  
  23. void testdist (int nooftests)
  24.  
  25. {
  26.    LINT a;
  27.    
  28.    LINT b;
  29.    
  30.    LINT c;
  31.    
  32.    int i;
  33.    
  34.    
  35.   for(i=1; i < nooftests;i++)
  36.   
  37.   {
  38.     a = randl(CLINTRNDLN);
  39.     
  40.     b = randl(CLINTRNDLN);
  41.     
  42.     c = randl(CLINTRNDLN);
  43.     
  44.     
  45.     //проверка + и *применением дистрибутивного закона
  46.     
  47.     if(( a + b)*!=(a*c+b*c))
  48.     
  49.     report_error(a, b, c,_LINE_);
  50.     
  51.     }
  52.      
  53.   }  
  54.  
  55.   
  56.   
  57.   void report_error (LINT& a, LINT& b,LINT& c,int line)
  58.   
  59.   {
  60.      LINT d = (+ b) * c;
  61.      
  62.      LINT e = a * c + b * c;
  63.      
  64.      cerr << "Ошибка в дистрибутивном законе в строке " << line << endl;
  65.      
  66.      cerr << "a = " << a << endl:
  67.      
  68.      cerr << "b = " << b << endl;
  69.      
  70.      cerr << "(a + b) * c = " c = " << d << endl;
  71.      
  72.      cerr << "a * c + b * c = " << e << endl;
  73.      
  74.      abort();
  75.      
  76.   }

А сейчас нада обязательно дунуть, если не дунуть, никакого чуда не произойдет.
сл. Амаяк Акопян.




Ранг: 617.6 (!)
Статус: Участник
_Вечный_Студент_

Создано: 30 сентября 2017 05:45 New!
Цитата · Личное сообщение · #2

Какое-то смутное чувство подсказывает, что это ни кто иной, как печально известный Абрахам.
Тот же стиль, типа "меня никто не спрашивал, но сегодня мы будем изучать ...."
Тем более, что криптография - это его конек.

| Сообщение посчитали полезным: Rio


Ранг: 422.7 (мудрец)
Статус: Участник

Создано: 30 сентября 2017 06:04 · Поправил: dosprog New!
Цитата · Личное сообщение · #3

) Особенно прикольно выглядит от это:

a = randl(CLINTRNDLN); b = randl(CLINTRNDLN); c = randl(CLINTRNDLN);

- мне нравится.

| Сообщение посчитали полезным: Rio


Ранг: 94.3 (постоянный)
Статус: Участник

Создано: 30 сентября 2017 13:09 New!
Цитата · Личное сообщение · #4

anonymous пишет:
сегодня напишем маленькую программу.

Очередной велосипед)

| Сообщение посчитали полезным: plutos


Ранг: 18.3 (новичок)
Статус: Участник

Создано: 30 сентября 2017 18:08 New!
Цитата · Личное сообщение · #5

да, автор явно дунул перед постом ....



Ранг: 2.1 (гость)
Статус: Участник

Создано: 01 октября 2017 00:18 · Поправил: anonymous New!
Цитата · Личное сообщение · #6

plutos "меня никто не спрашивал, но сегодня мы будем изучать ...." читаешь значит изучаешь.)

Rus " да, автор явно дунул перед постом .... " не зовидуй.)

Rio "Очередной велосипед" да , напиши жалобу , как этот difexacaw .)



Ранг: -0.7 (гость)
Статус: Участник

Создано: 01 октября 2017 01:28 New!
Цитата · Личное сообщение · #7

О целесообразности даже не спрашиваю, вопрос только в том, а зачем плодить подобные темы?
В ней нет ничего нового, ни алгоритма, ни какой то экстремальной оптимизации, я конечно понимаю, что сервер железный и все выдержит, но подобными темами вы лишь создаете поисковый шум, когда вбив в поиск интересующий вопрос в выдаче придется искать подходящую тему среди подобного информационного шлака.

| Сообщение посчитали полезным: plutos


Ранг: 2.1 (гость)
Статус: Участник

Создано: 01 октября 2017 02:14 · Поправил: anonymous New!
Цитата · Личное сообщение · #8

shellstorm
" В ней нет ничего нового, ни алгоритма, ни какой то экстремальной оптимизации"
Администрация ресурса неготивно относится "экстремальной оптимизации ."для тех кто не втеме.)
Пишу незатейливые программы в свободное время / в хорошем ностроении.)




Ранг: 617.6 (!)
Статус: Участник
_Вечный_Студент_

Создано: 01 октября 2017 02:52 New!
Цитата · Личное сообщение · #9

anonymous пишет:
читаешь значит изучаешь.)

Да нет, после строчки "Приветствую вас мои друзья,сегодня напишем маленькую программу." читал по диагонали , поскольку конец был немного предсказуем.



Ранг: 2.1 (гость)
Статус: Участник

Создано: 01 октября 2017 03:11 · Поправил: anonymous New!
Цитата · Личное сообщение · #10

plut
знаю я тебя, не оправдывайся, оппортунист.



Ранг: 2.5 (гость)
Статус: Участник

Создано: 07 октября 2017 01:39 · Поправил: rthax New!
Цитата · Личное сообщение · #11

anonymous
Я, конечно, может чего-то не понимаю, но буквально недавно реализовывал алгоритм SRP-6 на плюсах)
Так там минимум то, что надо был класс для работы с большими числами (кстати, если вдруг кому то надо, могу выложить. С++/Boost, есть вариант на JS). Посмотрел я твой код и нихера не понял, что он вообще делает. Пару мат. операций, примитивный псевдорандом.. Что должен делать этот код?

... Где само RSA??



Ранг: 2.1 (гость)
Статус: Участник

Создано: 07 октября 2017 05:14 · Поправил: anonymous New!
Цитата · Личное сообщение · #12

Реализующих процессы зашифрования и расшифрования
сообщений,также и проверки цифровой подписи.
Code:
  1. #include "flintpp.h"
  2.  
  3. #include "ripemd.h"
  4.  
  5. #define BLOCKTYPE_SIGN 01
  6.  
  7. #define BLOCKTYPE_ENCR 02
  8.  
  9.                 // Структура ключа RSA со всеми ключевыми компонентами
  10.  
  11. typedef struct 
  12.  
  13. {
  14.     LINT kpub, kpriv, mod, p, q, ep, eq, r;
  15.     USHORT bitlen_mod; // длина модуля в битах
  16.     USHORT bytelen_mod; // длина модуля в байтах
  17.  
  18. } KEYSTRUCT;
  19.  
  20. //  Структура,содержащая компоненты открытого ключа
  21.  
  22. typedef struct 
  23.  
  24. {
  25.  
  26.     LINT kpub, mod;
  27.     USHORT bitlen_mod; // длина модуля в битах
  28.     UUSHORT bytelen_mod; // длина модуля в байтах
  29.  
  30. } pkeystruct;
  31.  
  32.  
  33. class RSAkey
  34.  
  35. {   
  36.      public:
  37.        
  38.         inline RSAkey (void) {};
  39.         RSAkey ( const int);
  40.         RSAkey (const int, const LINT&);
  41.         pkeystruct export_public (void) const;
  42.         UCHAR* decrypt (const LINT&, int*);
  43.         LINT sign ( const UCHAR* const, cost int);
  44.  
  45. private:
  46.  
  47.   keystruct key;
  48.   // Вспомогательные функции 
  49.    int makekey (const int);
  50.    int testkey (void);
  51.    LINT Ffastdecrypt ( const LINT&);
  52. };
  53.  
  54.    class RSApub
  55.  
  56. {
  57.    publlc:
  58.       
  59.        inline RSApub (void) {};
  60.        RSApub (const RSAkey&);
  61.        LINT crypt ( const UCHAR* const, const int);
  62.        int authenticate (const UCHAR* const, const int, const LINT&);
  63.  
  64.   private:
  65.       
  66.     pkeystruct pkey;
  67.  
  68. };

попозже допишу.



Ранг: 422.7 (мудрец)
Статус: Участник

Создано: 07 октября 2017 07:41 New!
Цитата · Личное сообщение · #13

ТСЕ.



Ранг: 2.1 (гость)
Статус: Участник

Создано: 07 октября 2017 16:04 · Поправил: anonymous New!
Цитата · Личное сообщение · #14

Я, конечно, может чего-то не понимаю, но буквально недавно реализовывал алгоритм SRP-6 на плюсах)
Так там минимум то, что надо был класс для работы с большими числами (кстати, если вдруг кому то надо, могу выложить. С++/Boost, есть вариант на JS).
Code:
  1.  
  2. SRP Protocol Design
  3. SRP is the newest addition to a new class of strong authentication protocols that resist all the well-known passive and active attacks over the network. SRP borrows some elements from other key-exchange and identification protcols and adds some subtle modifications and refinements. The result is a protocol that preserves the strength and efficiency of the EKE family protocols while fixing some of their shortcomings.
  4.  
  5. The following is a description of SRP-6 and 6a, the latest versions of SRP:
  6.  
  7.   N    A large safe prime (= 2q+1, where q is prime)
  8.        All arithmetic is done modulo N.
  9.   g    A generator modulo N
  10.   k    Multiplier parameter (= H(N, g) in SRP-6a, k = 3 for legacy SRP-6)
  11.   s    User's salt
  12.   I    Username
  13.   p    Cleartext Password
  14.   H()  One-way hash function
  15.   ^    (Modular) Exponentiation
  16.   u    Random scrambling parameter
  17.   a,b  Secret ephemeral values
  18.   A,B  Public ephemeral values
  19.   x    Private key (derived from p and s)
  20.   v    Password verifier
  21.  
  22. The host stores passwords using the following formula:
  23.  
  24.   x = H(s, p)               (s is chosen randomly)
  25.   v = g^x                   (computes password verifier)
  26.  
  27. The host then keeps {I, s, v} in its password database. The authentication protocol itself goes as follows:
  28.  
  29. User -> Host:  I, A = g^a                  (identifies self, a = random number)
  30. Host -> User:  s, B = kv + g^b             (sends salt, b = random number)
  31.  
  32.         Both:  u = H(A, B)
  33.  
  34.         User:  x = H(s, p)                 (user enters password)
  35.         User:  S = (- kg^x) ^ (+ ux)   (computes session key)
  36.         User:  K = H(S)
  37.  
  38.         Host:  S = (Av^u) ^ b              (computes session key)
  39.         Host:  K = H(S)
  40.  
  41. Now the two parties have a shared, strong session key K. To complete authentication, they need to prove to each other that their keys match. One possible way:
  42.  
  43. User -> Host:  M = H(H(N) xor H(g), H(I), s, A, B, K)
  44. Host -> User:  H(A, M, K)
  45.  
  46. The two parties also employ the following safeguards:
  47.  
  48.     The user will abort if he receives B == 0 (mod N) or u == 0.
  49.     The host will abort if it detects that A == 0 (mod N).
  50.     The user must show his proof of K first. If the server detects that the user's proof is incorrect, it must abort without showing its own proof of K.
  51.  
  52. A paper describing this protocol is also available, as well as a conference paper describing an older version of the protocol.
  53.  
  54. For historical interest, descriptions of the previous versions of SRP are available on this site:

rthax выкладывай , болтун




Ранг: 672.3 (! !)
Статус: Участник
CyberMonk

Создано: 07 октября 2017 17:12 New!
Цитата · Личное сообщение · #15

anonymous

Оформите тему лучше, чтобы посмотреть на тему с разных сторон .. Вы используете "Активное обучение", что полезно как для Вас, так и для других, чтобы тема была достойна внимания, нужно было добавить проект с готовой программой, полные сорсы с проектом, листинг дампа obj файла в текстовом документе, лёгкое абстрактное описание основы теории, сорсы и техники применения в примерах, возможные сложности в понимании и вообще расширить тему. Если этого нет, значит эта тема подходит больше для блогов, когда кодер просто пробегает тему или же у Вас имеются вопросы по теме. Предметное обсуждение требует оформления



Ранг: 2.1 (гость)
Статус: Участник

Создано: 08 октября 2017 06:23 · Поправил: anonymous New!
Цитата · Личное сообщение · #16

Друзья-MGTOW,допишу движок для своего магазина.
И займемся,напишу дедуктивно,от общего к частному.

Напишем.
1. Генерация ключа криптосистемы RAS.
2. Экспорт открытых ключей.
3. Расшифрование.
4. Формирование цифровой подписи с использованием хэш-функции
а также для хранения и применения открытых ключей.
5. импорт открытого ключа из объекта класса.
6. Зашиврование текста.
7. проверка цифровой подписи.


MGTOW, никогда не доверяйте секретные облочным шифрам ( или любым другим секретным криптографическим функциям)!

Обязательная сертификация криптографических программ и устройств, то есть вам не разрешат торговать и разрабатывать криптопрограммы или криптографическими устройствами, или протоколы, все их вы должны сертифицировать. Как говорил товарищ Ленин, Мы пойдем другим путем!


 eXeL@B —› Программирование —› Пишем RSA криптографический алгоритм на языке Си

Видеокурс ВЗЛОМ