Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Регистрация программы


Автор: JohnnY 11.5.2007, 22:43
Принцип работы.
При первом запуске  1-ой программы должен произойти сбор информации т.е.
Например: серийные номера жестких дисков.
Далее из получившихся серийных номеров сгенерировать "ключ" и сохранить его например в файле...

Далее пользователь, например должен запустить 2-ую программу и ввести свои данные, т.е.
свою Фамилию, Имя, Отчество и т.д. и сохранить в файле, перед сохранением эта программа собирает те же данные что и 1-ая программа...

Потом пользователь отправляет сохранённый файл автору по e-mail...

Автор программы получает его и открывает его уже через 3-ю программу которая в свою очередь из собранной информации сгенерирует "ключ"...

Далее автор отправляет этот "ключ" пользователю... 

Для того чтобы зарегистрировать 1-ую программу пользователь должен ввести "ключ" в 1-ую программу, который он получил у автора.

После ввода "ключа" 1-я программа проверяет одинаковы ли "ключи", созданные, 1-й, при первом запуске 1-ой программы и 2-ой, тот который был прислан автором...

Надеюсь вы поняли принцип работы...

Я знаю как собрать информацию о жестких дисках т.е. их серийные номера...
Подскажите пожалуйста как можно сгенерировать из них строку (ключ)...
Можно было бы и РАНДОМАЙЗОМ, но необходимо чтобы из одной строки символов, получилась другая строка с хаотично расставленными символами из первой строки...

И необходимо чтобы при генерации ключа из одной и той же строки всегда получался один и тот же результат и только один, независимо от того сколько раз нажали на кнопку "Генерировать ключ"...

Помогите пожалуйста как же всё таки осуществить эту функцию генерации ключа... Спасибо...



Автор: Snowy 11.5.2007, 23:02
Ну, например так:
Код

function StringToHex(s: string): string;
var
  i: integer;
begin
  result := '';
  for i := 1 to Length(s) do
    result := result + IntToHex(ord(s[i]), 2);
end;

function HexToString(s: string): string;
var
  i: integer;
begin
  result := '';
  for i := 1 to Length(s) div 2 do
    try result := result + chr(StrToInt('$' + copy(s, i*2-1, 2)));
    except result := result + '?'; end;
end;

Автор: Sunvas 11.5.2007, 23:08
Шифрование на форуме не раз обсуждалось.. Юзай поиск.
А что будет, если юзер захочет проапргейдить свой комп?

Автор: ama_kid 11.5.2007, 23:41
JohnnY, сходи по http://vstepanov78.narod.ru/prog.htm - там много чего полезного для тебя есть...  smile 

Автор: JohnnY 12.5.2007, 00:00
Sunvas, ты же читал самый первый пост?

"Далее пользователь, например должен запустить 2-ую программу и ввести свои данные, т.е.
свою Фамилию, Имя, Отчество и т.д. и сохранить в файле, перед сохранением эта программа собирает те же данные что и 1-ая программа...

Потом пользователь отправляет сохранённый файл автору по e-mail..."


У автора уже будут данные этого пользователя и он может отправить повторный запрос, и уже бесплатно будет сгенерирован ключ (если конечно первая регистрация была платная)...



Snowy, спасибо, попробую...


ama_kid, тебе тоже спасибо, неплохая библиотека.... smile

Автор: W4FhLF 12.5.2007, 04:56
JohnnY, да возьми хоть md5 хеш, можешь sha для большей недёжности взять. Что-то своё выдумывать смысла нет, а схема честно говоря очень неудобная, как для пользователя, так и для разработчика и надёжность её отмеряется периодом до покупки первой копии. 

Более того, мне кажется, если я правильно понял, что схема вообще не рабочая, т.к. 1ая программа у тебя всегда будет одинакова и зашифрована одинаковым ключом, но расшифровывать ты её хочешь разными ключами. Так? Или она вообще никак не зашифрована, а просто проверяет данные из файла и присланные автором? Тогда твоя программа в общем случае будет взломана изменением одного байта. 

Автор: Letov 12.5.2007, 12:38
Код

for i:=0 to STRING.length do
begin
     case STRING[i] of
     'a' : STRING2[i]:=c;
     'b' : STRING2[i]:=e

//и так далее
end;

Автор: lukas 12.5.2007, 16:17
Шо та типа этого., 

логин + ключ, 2 поля, если после зашифровки логин совпадает с введенным ключом... значит все правильно... ну и так далее....


Код

var
  abc1: array [0..30] of char = ('h','a','f','g','e','q','y','p',
  '9','_','z','m','4','1','?','0','i','w','j','l','5','7',
  'u','2','t','3','r','8','6','s','k');    { 97..122 - a..z}

function Err(str1:string):string;
  var
  i:integer;
begin

for i:=1 to length(str1)-1 do begin
 str1[i]:=abc1[ord(str1[i])-91]
end;
 result:=str1;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)