Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2008, 22:45   #1
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
По умолчанию Алгорим RSA

Приветствую Вас. Вот прошу Вашей помощи в следующей проблеме: Алгорим RSA.
Генерация ключей у меня есть, написал:
Код:
function nod(a,b:integer):integer;
var i:integer;
begin
  while a<>b do if a>b then a:=a-b else b:=b-a;
  result:=a;
end;

procedure TForm1.Button1Click(Sender: TObject);
var n,p,q,F,i,e,k,d:integer;
begin
  p:=strtoint(edit1.Text);
  q:=strtoint(edit2.Text);
    n:=p*q;
    F:=(p-1)*(q-1);
  for i:=2 to F do
    if nod(i,F)=1 then
      begin
        e:=i;
        break;
      end;
k:=1;
while (k*F+1)mod e<>0   do
  inc(k);
  d:=(k*F+1)div e;
edit4.Text:='= '+inttostr(d);
edit5.Text:='= '+inttostr(e);
end;
а вот само шифрование и расшифровывание, как сделать?
Знаю формулы шифрования C = M (в степени) e mod n,
расшифровывания M = C (в степени) d mod n.
Это если я правильно понял просто формулы вбить, или что-то еще необходимо?
Если не затруднит, можно с пояснениями.


Заранее благодарю.
"Одни наслаждаются дождём, другие просто промокают." - Роджер Миллер
LT. вне форума Ответить с цитированием
Старый 22.10.2008, 13:58   #2
LT.
The IT Crowd
Пользователь
 
Аватар для LT.
 
Регистрация: 10.10.2008
Сообщений: 41
По умолчанию

Сам алгоритм понятен:
Зашифруем и расшифруем сообщение "САВ" по алгоритму RSA. Для простоты буду использовать маленькие числа(на практике - нужно брать намного большие).
1) Выберем p=3 and q=11.
2)Определим n= 3*11=33.
3) Hайдем (p-1)*(q-1)=20. Следовательно, d будет равно, например, 3: (d=3).
4) Выберем число е по следующей формуле: (e*3) mod 20=1. Значит е будет равно, например, 7: (e=7).
5) Представим шифруемое сообщение как последовательность чисел в диапозоне от 0 до 32 (незабывайте, что кончается на n-1). Буква А =1, В=2, С=3.
Теперь зашифруем сообщение, используя открытый ключ {7,33}
C1 = (3^7) mod 33 = 2187 mod 33 = 9;
C2 = (1^7) mod 33 = 1 mod 33 = 1;
C3 = (2^7) mod 33 = 128 mod 33 = 29;
Теперь расшифруем эти данные, используя закрытый ключ {3,33}.
M1=(9^3) mod 33 =729 mod 33 = 3(С);
M2=(1^3) mod 33 =1 mod 33 = 1(А);
M3=(29^3) mod 33 = 24389 mod 33 = 2(В);

но как реализовать его в коде?
"Одни наслаждаются дождём, другие просто промокают." - Роджер Миллер
LT. вне форума Ответить с цитированием
Старый 10.01.2009, 14:25   #3
Эльмирчик (ms)
 
Аватар для Эльмирчик (ms)
 
Регистрация: 08.01.2009
Сообщений: 6
По умолчанию

И у меня таже проблемка. Только вот программу, касающуюся ключей я сделала так:
Код:
Program RSA;
Var 
p, q, r, fr, Kp, Ks, o: integer;
Begin
Write('Введите простое число p=');
readln(p);
Write('Введите простое число q=');
readln(q);
r:=p*q;
Write('Произведение двух простых чисел p и q равно r=',r);
fr:=(p-1)*(q-1);
Writeln('функция Эйлера f(r)=',fr);
Write('Введите закрытый ключ Ks=');
readln(Ks);
Kp:=1;
begin 
repeat Kp:=Kp+1 until (Kp*Ks) mod ((p-1)*(q-1))=1;
end;
Writeln('Открытый ключ Kp=',Kp);
End.
а дальше ступор
«Мое поражение не будет означать, что нельзя было победить.Многие потерпели поражение,стараясь достичь вершины Эвереста,и в конце концов Эверест был побежден».
(Эрнесто Че Гевара)
Эльмирчик (ms) вне форума Ответить с цитированием
Старый 05.06.2009, 20:50   #4
basker2007
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 16
По умолчанию

Учти то что p и q должны быть взаимно простыми числами а не просто простыми. И их необходимо генерировать самому, иначе если это делать руками то раньше мозг сломается. ведь если будет ошибка в числах то сообщение если даже зашифруется то не факт что правильно расшифруется. Учитывай тот факт что бываю ложные взаимно простые числа. Они не дадут верно расшифровать. Пока всё. как изучишь данный пункт объясню дальше. Либо жди когда я напишу это. Я сейчас как раз это делаю. Мне в универе это сдать надо.
basker2007 вне форума Ответить с цитированием
Старый 05.06.2009, 22:36   #5
Эльмирчик (ms)
 
Аватар для Эльмирчик (ms)
 
Регистрация: 08.01.2009
Сообщений: 6
По умолчанию

Я сдала эту работу именно вот так.....или преподаватель плохо смотрела или она проканала
Код:
Program RSA;
Var 
p, q, r, fr, Kp, Ks, o: integer;
Begin
Write('Введите простое число p=');
readln(p);
Write('Введите простое число q=');
readln(q);
r:=p*q;
Write('Произведение двух простых чисел p и q равно r=',r);
fr:=(p-1)*(q-1);
Writeln('функция Эйлера f(r)=',fr);
Write('Введите закрытый ключ Ks=');
readln(Ks);
Kp:=1;
begin repeat Kp:=Kp+1 until (Kp*Ks) mod ((p-1)*(q-1))=1;
end;
Writeln('Открытый ключ Kp=',Kp);
End.

Код:
Program RSA_2;
Var
C,m: integer;
Const
R=72;
Begin
Writeln ('Введите исходное число');
Readln(M);
C:=sqr(M)*sqr(M)*M mod R;
Writeln ('Зашифрованное число - ',C);
End.
«Мое поражение не будет означать, что нельзя было победить.Многие потерпели поражение,стараясь достичь вершины Эвереста,и в конце концов Эверест был побежден».
(Эрнесто Че Гевара)
Эльмирчик (ms) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RSA шифрование. Требуется пример. Hakman Помощь студентам 5 22.02.2008 16:05
вычисление больших степеней по модулю - Rsa Студент Общие вопросы C/C++ 2 19.10.2007 18:28