
08.11.2008, 12:55
|
|
Участник форума
Регистрация: 06.11.2008
Сообщений: 208
С нами:
9216248
Репутация:
9
|
|
Алгоритм шифрования 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..
|
|
|