Delphi для параноика: свой PGP за 5 минут

Лозовский Александр

Xakep, номер #053, стр. 053-084-3


End Of The World

Ну все, с этого момента можешь считать, что свой PGP у тебя уже есть. Ключи его полностью совместимы с другими реализациями RSA алгоритма, а в исходник я еще включил функцию сохранения и загрузки открытого ключа из файла. Поэтому не забудь скачать его с www.cydsoft.com/vr-online или взять на диске. Да, еще глянь на директорию с компонентом, там есть хелп-файл и его неплохо бы почитать (правда, он на английском). Там понаписано много интересного, в том числе и про цифровую подпись (да, она тоже поддерживается RSA алгоритмом). Вещь это нужная, потому что без нее MS IE никогда бы не выдавал нечто вроде: "Подлинность The Super-Porno-Viewer удостоверена компанией Майкрософт. Всегда ли доверять компании Майкрософт?" :)

На этой торжественной ноте ваш непокорный спешит откланяться и сообщить, что на все вопросы (жалобы, предложения, тупой флейм, etc) он с удовольствием ответит по электронной почте :).

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

IF nado= true then //Поехали

begin

IF i= length-1 then //Да ведь мы все заполнили...

begin

RSA1.MakeKeyPair(pP, pQ); //Образуем ключ

nado:= false; //И уже ничего не надо

Edit1.Text:= RSA1.PrivateKey; //Отобразим найденное

Edit2.Text:= RSA1.PublicKey;

end else //Ах, не заполнили? Исправим

begin

pP.Contents[i]:= X*Y*random($FFFF); //Координаты умножаем на случайность

pQ.Contents[i]:= X*Y*Y*random($FFFF);

Progressbar1.Position:=i; //Увеличим прогресс :)

inc(i); //Перейдем к следующему элементу, увеличим i

end;

end;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

IF RadioButton1.Checked then //Надо шифровать?

begin

FromT:= Memo1.text; //Исходная строка

RSA1.PublicKey:= Edit2.Text; //Ключ

RSA1.EncryptString(FromT, ToT); //Зашифровали

Memo2.text:= ToT; //Вывели конечный текст

end else //Ах, не шифровать? Тогда наоборот :)

begin

RSA1.PrivateKey:= EDit1.Text;

FromT:= memo2.Text;

RSA1.DecryptString(FromT, ToT);

MEmo1.Text:= ToT;

end;

end;

Назад на стр. 053-084-2  Содержание