RSA

/**
* Программа по дискретной математике
* Шифрование RSS (Для небольших чисел в пределах int)

Алгоритм создания открытого и закрытого ключей
1. Выбираются 2 простых числа p и q.
2. Вычистляется их произведение N=p*q
3. Вычисляется значение функции Эйлера f(p,q)=(p-1)*(q-1)
4. Выбирается простое число e которое взаимопростое с f(p,q)
5. Выбирается число d удовлетворяющее условию e*d mod f(p,q)=1
6. Пара [e,N] – открытый ключ шифрования,Пара [d,N] – закрытый ключ шифрования
7. Тест
*/

<br />
#include &lt;iostream&gt;<br />
#include &lt;math.h&gt;<br />
#include &lt;windows.h&gt;<br />
using namespace std;</p>
<p>char*rus (char*);</p>
<p>int main()<br />
{<br />
/**<br />
* Программа по дискретной математике<br />
* Шифрование RSS (Для небольших чисел в пределах int)</p>
<p> Алгоритм создания открытого и закрытого ключей<br />
 1. Выбираются 2 простых числа p и q.<br />
 2. Вычистляется их произведение N=p*q<br />
 3. Вычисляется значение функции Эйлера f(p,q)=(p-1)*(q-1)<br />
 4. Выбирается простое число e которое взаимопростое с f(p,q)<br />
 5. Выбирается число d удовлетворяющее условию e*d mod f(p,q)=1<br />
 6. Пара [e,N] – открытый ключ шифрования,Пара [d,N] – закрытый ключ шифрования<br />
 7. Тест<br />
*/</p>
<p>// RSA<br />
cout&lt;&lt;rus(&quot;Реализация RSA шифрования.&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;endl;</p>
<p>// 1 - этап<br />
int p,q;<br />
cout&lt;&lt;rus(&quot;1. Введите два простых числа*&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;*Простые числа деляться только на себя и 1  -&gt; 2, 3, 5, 7, 11, 13, 17...&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;p=&quot;);<br />
cin&gt;&gt;p;<br />
cout&lt;&lt;rus(&quot;q=&quot;);<br />
cin&gt;&gt;q;<br />
cout&lt;&lt;endl;</p>
<p>// 2 - этап<br />
int N;<br />
N=p*q;<br />
cout&lt;&lt;rus(&quot;2. N=p*q | N=&quot;)&lt;&lt;N&lt;&lt;endl;<br />
cout&lt;&lt;endl;</p>
<p>// 3- этап<br />
int f;<br />
f=(p-1)*(q-1);<br />
cout&lt;&lt;rus(&quot;3. f(p,q)=(p-1)*(q-1) | f=&quot;)&lt;&lt;f&lt;&lt;endl;<br />
cout&lt;&lt;endl;</p>
<p>// 4- этап<br />
int e;<br />
cout&lt;&lt;rus(&quot;4. Введите простое число e ,взаимно простое с (1&lt;e&lt;f) &quot;)&lt;&lt;f&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;e=&quot;);<br />
cin&gt;&gt;e;<br />
cout&lt;&lt;endl;</p>
<p>// 5- этап<br />
int d=1,s;<br />
do {<br />
s=(d*e)%f;<br />
d++;<br />
} while(s!=1);<br />
d=d-1;</p>
<p>cout&lt;&lt;rus(&quot;5. Число d | d=&quot;)&lt;&lt;d&lt;&lt;endl;<br />
cout&lt;&lt;endl;</p>
<p>// 6 - этап - вывод пар ключей<br />
cout&lt;&lt;rus(&quot;Вывод пар ключей&quot;)&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Публичная пара ключей {e,n} = {&quot;)&lt;&lt;e&lt;&lt;&quot;,&quot;&lt;&lt;N&lt;&lt;&quot;}&quot;&lt;&lt;endl;<br />
cout&lt;&lt;rus(&quot;Закрытая пара ключей {d,n} = {&quot;)&lt;&lt;d&lt;&lt;&quot;,&quot;&lt;&lt;N&lt;&lt;&quot;}&quot;&lt;&lt;endl;<br />
cout&lt;&lt;endl;</p>
<p>// Тест<br />
int j,enc,dec,k,m;<br />
cout&lt;&lt;rus(&quot;Введите шифруемый текст&quot;)&lt;&lt;endl;<br />
cin&gt;&gt;m;</p>
<p>k=1;<br />
for(int i=0;i&lt;e;i++)<br />
k=k*m%N;<br />
k = k%N;<br />
cout&lt;&lt;rus(&quot;Зашифровано: &quot;)&lt;&lt;k&lt;&lt;endl;</p>
<p>m=1;<br />
for(int i=0;i&lt;d;i++)<br />
m=m*k%N;<br />
m=m%N;<br />
cout&lt;&lt;rus(&quot;Расшифровка: &quot;)&lt;&lt;m&lt;&lt;endl;<br />
}</p>
<p>/**<br />
* Функция перекодировки<br />
*/<br />
char bufer [255];<br />
char*rus (char*s) {<br />
 CharToOem (s,bufer);<br />
 return bufer;<br />
}<br />

Вам также может понравиться ...