Rok temu zrobiłem prosty skrypt który sprawdza licencję aplikacji dla swojej apki w Delphi 11.3
Komponenty wykorzystane
IdDecoderMIME1
IdEncoderMIME1
Dołączam kod źródłowy.
Czy coś w tym kodzie można ulepszyć żeby można było wykorzystać w aplikacjach komercyjnych, żeby było bardziej bezpieczne?
Więc jak działa kod
Jest procedura
procedure Zapis(const sKey: string; const sName: string; const sValue: string);
Globalne stałe
const
SecretKey = 517;
SuperProgram = '\Software\NazwaAplikacji';
KeyValue = 'license';
implementation
uses
//Rejestr windows Registry
Registry;
{$R *.dfm}
Procedura odczytywania klucza z rejestra
function Odczyt(const sKey: string; const sName: string; var sValue: string): Boolean;
function TForm1.Odczyt(const sKey, sName: string; var sValue: string): Boolean;
var
Reg: TRegistry;
begin
Result := False;
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(sKey, False) and Reg.ValueExists(sName) then
begin
sValue := Reg.ReadString(sName);
Result := True;
end;
finally
Reg.Free;
end;
end;
Procedura zapisywania do rejestru
procedure TForm1.Zapis(const sKey, sName, sValue: string);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create(KEY_WRITE);
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(sKey, True) then
Reg.WriteString(sName, sValue);
finally
Reg.Free;
end;
end;
Przycisk szyfrowanie klucza i zapisywania do rejestru
procedure TForm1.Button5Click(Sender: TObject);
var
v:string;
cryptedData: string;
begin
v := License.Text;
//szyfruje
cryptedData := IdEncoderMIME1.EncodeString(v);
Zapis(SuperProgram, KeyValue, cryptedData);
ShowMessage('Klucz zaszyfrowany i zapisany do rejestru ' + cryptedData+' Kliknij na '+ #13 + 'Przycisk Sprawdź');
end;
Przy starcie aplikacje zablokowane przyciski
procedure TForm1.FormCreate(Sender: TObject);
begin
edt1.Enabled := False;
button4.Enabled := False;
button3.Enabled := False;
end;
Kod przycisku "Sprawdź"
procedure TForm1.aaaClick(Sender: TObject);
var
v:string;
sLicencja: string;
decryptedData: string;
begin
sLicencja:= License.Text;
if Odczyt(SuperProgram, KeyValue, v) then //licencja
begin
decryptedData := IdDecoderMIME1.DecodeString(v);//szyfruje
//ShowMessage('Wynik z rejestru KeyLicenseValue ' + decryptedData);
EdtWynik.Text := decryptedData;
//sprawdzam czy dane zgadzają się
if (decryptedData = sLicencja) then
begin
edt1.Enabled := True;
button4.Enabled := True;
button3.Enabled := True;
ShowMessage('Klucz jest poprawnie odszyfrowany' + #13 + 'Pola odblokowane!')
end
else
ShowMessage('Błędna licencja ' + decryptedData);
end;
end;