- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Имеется 3-и массива:
1-ый это буквы русского и английского алфавита, а также символы (@,!,% и т.д.).
2-ой это нобор букв и цифр (2-а символа), в которые преобразуется имя пользователя.
3-ий необязательный, но полезный. Это также набор букв и символов. Он увеличивает размер ключа.
Программа ищет каждый символ первого массива в имени пользователя, и если находит, то заменяет его на набор символов из второго массива, добавляя символы из третьего (индексы символов 2-ого и 3-его массива совпадают с индексами 1-ого).
Теперь я приведу модуль, реализующий функцию создания ключа по имени:
Функция function NameToKey(Name: String): String; преобразует указанное имя (параметр Name) в ключ (тип String).
Функция function CheckKey(Name,Key: String): Boolean; проверяет указанный ключ (параметр Key) с введенным именем (параметр Name). Если сгенерированый на основе имя ключ совпадает с указанным, то результат равен true.
Пишем генератор ключей
Получится как то так:
Пишем в приложение :
Получится как то так:
Введите имя и ключ, если ключ и имя правильные активируется кнопка старт
не забываем ставить лайки Right!
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 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.
Пишем в приложение :
Код:
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.
Введите имя и ключ, если ключ и имя правильные активируется кнопка старт
не забываем ставить лайки Right!