Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2007, 12:45   #1
Fainder
Участник клуба
 
Регистрация: 15.02.2007
Сообщений: 1,112
Стрелка Помогите сделать регистратор

Буду весьма признателен, если кто подскажет, как сделать (или где скачать с исходниками) нормальный генератор кодов, сделанный на дельфе. Регистрационный ключ должен генерироваться исходя из компьютерного кода, который, в свою очередь, основываться на параметрах основного железа. Я кое - что пытался написать, но программа глючит. Далее я даю свою процедуру, а во вложенном файле полный исходник:
procedure TForm1.Button1Click(Sender: TObject);
var
lpMemoryStatus : TMemoryStatus;Ram : int64;
VolumeName,
FileSystemName : array [0..MAX_PATH-1] of Char;
VolumeSerialNo : DWord;
MaxComponentLength,
FileSystemFlags : DWord;
Compcode, Regcode : extended;
temp : real;
begin
Edit2.Clear;
if Edit11.Text <> '1234567'Then begin
Showmessage('Неверный пароль');Edit1.Clear;
Edit11.SetFocus;
end else begin
GetVolumeInformation('C:\',VolumeNa me,MAX_PATH,@VolumeSerialNo,
MaxComponentLength,FileSystemFlags,
FileSystemName,MAX_PATH);
lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
GlobalMemoryStatus(lpMemoryStatus);
with lpMemoryStatus do
ram :=strtoint(Format('%0.0f',[dwTotalPhys div 1/1 ]));
ramm := ram;
Edit1.Text :=floatToStr(Round(DiskSize(3)/10737841824*ram/19781881100*VolumeSerialNo));
Compcode := strtofloat(Edit1.Text);
temp :=strtofloat(Edit1.Text[1])+strtoint(Edit1.Text[2])+strtoint(Edit1.Text[3]);
Regcode := Round(sqrt(Compcode)/temp);
Regcode := sqr(Regcode)*ramm/4750;
Regcode:=round(Regcode*6);
Regcode :=Regcode+strtoint(Edit1.Text[5])*strtoint(Edit1.Text[4]);
Edit2.Text:=floattostr(regcode);
end;
end;

Последний раз редактировалось Fainder; 01.11.2007 в 12:59.
Fainder вне форума Ответить с цитированием
Старый 23.03.2007, 22:18   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

А зачем тебе нужен такой генератор?
Alar вне форума Ответить с цитированием
Старый 24.03.2007, 09:43   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Защита ShareWare.
zetrix вне форума Ответить с цитированием
Старый 24.03.2007, 11:13   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Так это нужно проверять на удалённом сервере. Чтобы программа подключилась к инету, и ей разрешили работать на этом компе под этим серейником. - вот это более менее надёжно...
Alar вне форума Ответить с цитированием
Старый 24.03.2007, 11:43   #5
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

> Edit1.Text :=floatToStr(Round(DiskSize(3)/10737841824*ram/19781881100*VolumeSerialNo));

вообще жуть
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 24.03.2007, 11:48   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Virtson, и что это было?
Alar вне форума Ответить с цитированием
Старый 24.03.2007, 14:18   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Virtson, и что это было?
Это он ужаснулся одной из строк оригинала (см. 1-й пост)...

А если серьезно, то единственно неповторяющимся является данный момент отсчета времени. Дабы исключить влияние несинхронности часов на разных компьютерах (гипотетически ведь можно допустить, что несколько юзеров будут регистрироваться, а разнобой у них в системном времени таков, что получится одно и то же время), любым образом накладывается параметр, к примеру, VolumeSerialNo и получается некое "страшное" число. Теперь это число путем приведения к целому (вернее, простым убиранием плавающей запятой) и перестановкой цифирок по определенному алгоритму с последующей вставкой дефисов и т.д.
В результате, вуа-ля - имеем нечто вроде ABCD-1726-4937-9432...

Последний раз редактировалось mihali4; 24.03.2007 в 14:27.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать... slim5 Помощь студентам 4 15.06.2008 21:47
Помогите сделать выборку! Adm Microsoft Office Access 1 06.02.2008 19:10