Показать сообщение отдельно

Алгоритм шифрования RSA
  #716  
Старый 08.11.2008, 12:55
F&D
Участник форума
Регистрация: 06.11.2008
Сообщений: 208
С нами: 9216248

Репутация: 9
Exclamation Алгоритм шифрования RSA

Доброго времени суток друзья. У меня вот такая проблемка с задачей. Необходимо реализовать алгоритм шифрования RSA, т.е. шифрование и расшифровывание.

Код:
var
  Form1: TForm1;
  Fn,n,e,p,q,d:integer;
implementation

{$R *.dfm}
//наибольший общим делитель
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 i,k:integer;
begin
  p:=strtoint(edit1.Text);
  q:=strtoint(edit2.Text);
    n:=p*q;
    Fn:=(p-1)*(q-1);
  for i:=2 to Fn do
    if nod(i,Fn)=1 then
      begin
        e:=i;
        break;
      end;
k:=1;
while (k*Fn+1)mod e<>0   do
  inc(k);
  d:=(k*Fn+1)div e;

edit4.Text:='= '+inttostr(d);
edit3.Text:='= '+inttostr(e);
end;
//шифрование
procedure TForm1.Button2Click(Sender: TObject);
var s1,s:string;
    k,c,m,nn,i,j:integer;
begin
  memo1.Clear;
  s:=Edit5.Text;
  c:=1 ;
  s1:='';
  nn:=length(s);
    for i:=1 to nn do
      begin
        m:=(ord(s[i])-ord('A')) mod 26;           
        c:=1 ;
          for j:=1 to e do                        
            c:=(c*m) mod n ;
            memo1.lines.add(inttostr(c)) ;   
            c:=c mod 26;
            s1:=s1 + chr(c+ord('A')) ;       
      end;
  Edit6.Text:=s1;
end;
//дешифровка
procedure TForm1.Button3Click(Sender: TObject);
var s1,s:string;
k,c,m,nn,i,j:integer;
begin
  s:= Edit6.Text;
//c:=1 ;
s1:='';
nn:=length(s);
for i:=1 to nn do
begin
     m:=(ord(s[i])-ord('A')) mod 26;
     c:=1 ;
      for j:=1 to d do
       c:=(c*m) mod n ;
       memo1.lines.add(inttostr(c)) ;
       c:=c mod 26;
     s1:=s1 + chr(c+ord('A')) ;
end;
Edit7.Text:=s1;
end;
end.
вот шифрование написано вроде правильно, но не работает ,и дешифровка - тоже. И в мемо выводит не правильно. Можете подсказать, где что изменить, в чем я ошибся?!

Последний раз редактировалось F&D; 10.11.2008 в 13:15..
 
Ответить с цитированием