Предложите алгоритм.

 

Предложите алгоритм, генерирующий пароль к счёту.
Входные данные: номер счёта и дата окончания лицензии.

Пароль должен состоять не менее, чем из 10 литер, причём обязательно должен содержать буквы и цифры.
Пароли для рядомстоящих номеров счетов должны отличаться существенно (несовпадение цифр и букв в паролях).

Разумеется, обратный пересчёт должен быть невозможен.

Например, для счёта 12345 и даты окончания 2009.05.23 пароль должен иметь прибл. такой вид: S29h5mF27ee4

 

Почему бы не взять уже готовый генератор ключей, например, к ВинЗип-у.

Ввод: 12345 2009.05.23

Вывод: 253E170C

Да, только здесь меньше, чем 10 символов. Можно писать вывод дважды: 253E170C253E170C.

Что скажете? Конечно же способ должен быть неизвестен никому, кроме исполнителя / продавца.

Прилагаю генератор ключей для ВинЗип 8.1.

Способ я засветил, как пример он хорош :)

Прошу модераторов не считать мое сообщение как призыв к взлому программ.

Файлы:
example.zip  4 kb
 

Почему бы не взять уже готовый генератор ключей, например, к ВинЗип-у.


Этот метот прост, но неподойдёт по той причине что создатель генерилки знает алгоритм
по которому и создавал свою програмку...


Тут только вариант со своей кодовой таблицей должен помочь.
a+b*c=пароль

где c цифра(или число) из таблицы

 
Parabellum:

Почему бы не взять уже готовый генератор ключей, например, к ВинЗип-у.

Ввод: 12345 2009.05.23

Вывод: 253E170C

Хорошая штука. Но это не то.

Мне нужен код. Его необходимо будет вписать в mq4, с целью комерческого распространения программы.

10 символов - это пожелание. Рассмотрим и меньше. Может, 8 и достаточно будет.

 
Да, и ещё...

Пароль макс. 15 знаков

Дата, а 20080328 это уже 8 знаков, и хоть редкость но есть номера счетов более оставшихся 7 знаков...
Конечно это не имеет значения если счета одного ДЦ и там например 5-6 знаков и до 7-8 ой как далеко ;)


Попутно, в КТ если использовать двузначный формат, то например вторая цифра будет отвечать
за регистр, чёт-нечет - верхний-нижний...


Единственный момент компрометации КТ это вровство с компьютера где генирится пароль файла.

 
В свое время для защиты от копирования я использовал системную информацию из заголовков первых секторов жесткого диска и его серийный номер как ключ, но для этого специально писал процедуру на asm.
 
SК, посмотрите на разнообразные алгоритмы хеширования

http://www.google.com/search?hl=uk&q=hash+function+code&lr=

 

Мне нужен код. Его необходимо будет вписать в mq4, с целью комерческого распространения программы.

10 символов - это пожелание. Рассмотрим и меньше. Может, 8 и достаточно будет.

Тогда бы подробнее...
Что значит в код? проверка на валидность?

Ну тогда точно таблица и поможет...
Она же "спрячется" в ex4


a+b*c=пароль

имелось ввиду это:

дата

++++++++++

номерсчёта

**********

сссссссссс

==========

AAAAAAAAAA


(читаем сверху вниз)

Получаем некое число, которое потом переводим в литеры
попутно вторая цифра ячейки рихтует регистр...


Можно обойтись и без *c но тогда будет маленькая лезейка ввиду известности исходных

данных для формирования пароля... а так сбивается эта халявка... ;)


Каждый разряд получившегося "некого числа" имеет 10 значений от 0 до 10
а цифр если латиница 26 тогда можно со временем менять первые 10 букв, вторые, середина.

Или сразу сделать рандомный выбор для постоянного использования 10 из 26

 

Вот ещё пример - проеобразование Txt ---> Unicode.

// txt2uni.c
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[], char *envp[])
{ FILE *SrcFile;
FILE *DstFile;
char ch;
wchar_t wch;

if(argc > 1)
{ if((SrcFile = fopen(argv[1], "rb")) == NULL) return 1;
if((DstFile = fopen("!output.txt","wb+")) == NULL) return 1;

fputc(0xFF, DstFile);
fputc(0xFE, DstFile);

while(TRUE)
{ ch = fgetc(SrcFile);
if(feof(SrcFile)) break;

// mbstowcs(&wch, &ch, 1);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, &ch, 1, &wch, 1);
fputwc(wch, DstFile);
}
fclose(SrcFile);
fclose(DstFile);
}
else { printf("Use: txt2uni <filename>"); }
return 0;
}
 
Parabellum:

Вот ещё пример.....

Насчет табов - я не виноват.
 
Ага... проверка валидности

номерсчёта+дата+таблица=таблица<-дата<-номерсчёта

Номер счёта не меняется и потому в формуле без изменений.
А вот дату привести к виду ДО срока 1111 будет как при формировании пароля

так и "ответ" на запрос даты сегодня в советнике, а если ПОСЛЕ то например 2222

что уже несовпадение... и блокировка.