• Что бы вступить в ряды "Принятый кодер" Вам нужно:
    Написать 10 полезных сообщений или тем и Получить 10 симпатий.
    Для того кто не хочет терять время,может пожертвовать средства для поддержки сервеса, и вступить в ряды VIP на месяц, дополнительная информация в лс.

  • Пользаватели которые будут спамить, уходят в бан без предупреждения. Спам сообщения определяется администрацией и модератором.

  • Гость, Что бы Вы хотели увидеть на нашем Форуме? Изложить свои идеи и пожелания по улучшению форума Вы можете поделиться с нами здесь. ----> Перейдите сюда
  • Все пользователи не прошедшие проверку электронной почты будут заблокированы. Все вопросы с разблокировкой обращайтесь по адресу электронной почте : info@guardianelinks.com . Не пришло сообщение о проверке или о сбросе также сообщите нам.

Защита Программы Посредством Ввода Ключа И Имени

Sascha Оффлайн

Sascha

Заместитель Администратора
Команда форума
Администратор
Регистрация
9 Май 2015
Сообщения
1,562
Баллы
155
Имеется 3-и массива:
1-ый это буквы русского и английского алфавита, а также символы (@,!,% и т.д.).
2-ой это нобор букв и цифр (2-а символа), в которые преобразуется имя пользователя.
3-ий необязательный, но полезный. Это также набор букв и символов. Он увеличивает размер ключа.

Программа ищет каждый символ первого массива в имени пользователя, и если находит, то заменяет его на набор символов из второго массива, добавляя символы из третьего (индексы символов 2-ого и 3-его массива совпадают с индексами 1-ого).
Теперь я приведу модуль, реализующий функцию создания ключа по имени:
Код:
unit Keygen;

///////////////////////////////////////////////////////
//     Модуль, позволяющий создавать                //
//     защиту программы ключом                      //
//////////////////////////////////////////////////////

interface

uses StrUtils,SysUtils;

const

// Буквы и символы, которые надо заменить на код
Chars: array[0..75] of Char = ('a','b','c','d','e','f','g','h','i','j',
                                       'k','l','m','n','o','p','q','r','s',
                                       't','u','v','w','x','y','z',' ',
                                       'а','б','в','г','д','е','ё','ж','з','и','й','к','л'
                                       ,'м','н','о','п','р','с','т','у','ф','х','ц','ч','ш'
                                       ,'щ','ъ','ы','ь','э','ю','я',
                                       '!','@','#','%','{','}','<','>','?',')','(','*','&','^',
                                       '[',']');

// Заменяем символы на следующие
Num: array[0..75] of String = ('Q3','W6','J8','D2','S4','B2','9E','7U','5C','0H',
                                       'F5','LV','3C','IO','00','01','P1','FF','U6',
                                       'M2','CD','KE','AZ','H4','7I','Z9','RO',
                                       'FT','25','8J','BM','PN','5T','U2','SA','US','MH','LP','CS','3F'
                                       ,'R4','I7','9V','X5','MX','SF','7X','34','04','70','14','5L','2K'
                                       ,'Q8','KG','ZA','6Z','BD','MR','TT',
                                        'TY','KJ','3I','DA','87','45','ML','QW','4R','0E','F7','5H','Y4','PO',
                                       'VS','CU');

// И добавляем еще пару
Extra: array[0..75] of String = ('UJ','FG','3N','W2','M0','83','RT','9X','F2','U4',
                                       'DJ','VC','7B','SY','LQ','21','6T','ND','KI',
                                       '1S','G3','Y7','6K','EJ','0L','0D','7F',
                                       'WE','JI','UY','1G','66','FR','HL','KS','OW','0N','VV','IN','TY'
                                       ,'87','T6','47','53','91','2N','FA','QQ','PP','C3','4E','CH','JU'
                                       ,'2S','5M','H6','TQ','8D','ZF','99',
                                        'JH','2B','MQ','LL','00','ER','38','M4','7A','XZ','VD','K0','EN','GR',
                                       'GG','YO');

// Получаем код из указанного имени
function NameToKey(Name: String): String;
// Сверяем ключ с введенным
function CheckKey(Name,Key: String): Boolean;

implementation

function NameToKey(Name: String): String;
var I: Integer;
S:String;
begin
S:='KEY';
// Генерируем ключ
for I := 0 to 75 do
  begin
if (ContainsText(Name,Chars[i])=true) then
begin
  S:=S+'-'+Num[i]+Extra[i];
end;
end;
Result:=S;
end;

function CheckKey(Name,Key: String): Boolean;
var I: Integer;
S:String;
begin
S:='KEY';
// Генерируем ключ
for I := 0 to 75 do
  begin
if (ContainsText(Name,Chars[i])=true) then
begin
  S:=S+'-'+Num[i]+Extra[i];
end;
end;
// Сверяем ключ
if S=Key then
begin
  Result:=true
end
else
begin
  Result:=false;
end;
end;

end.
Функция function NameToKey(Name: String): String; преобразует указанное имя (параметр Name) в ключ (тип String).
Функция function CheckKey(Name,Key: String): Boolean; проверяет указанный ключ (параметр Key) с введенным именем (параметр Name). Если сгенерированый на основе имя ключ совпадает с указанным, то результат равен true.

Пишем генератор ключей
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,Key;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=NameToKey(Edit1.Text);
end;

end.
Получится как то так:
key.PNG
Пишем в приложение :
Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,key;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckKey(Edit1.Text,Edit2.Text)then
Button2.Visible:=True
else
Button2.Visible:=False;

end;

end.
Получится как то так:
soft.PNG
Введите имя и ключ, если ключ и имя правильные активируется кнопка старт
aktiv.PNG
не забываем ставить лайки Right!
 
Вверх Снизу