powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
25 сообщений из 188, страница 7 из 8
Тяпничный pwdgen
    #38811869
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, да, поведение отличается. Не уверен, что нужно исправлять.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811896
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonm_Sla, svn-ом умеешь пользоваться? Давай добавлю тебя в разработчики.Не надо. Пишу пока интересно и пока время есть.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811915
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну... старина Циммерман слил его исходнички в своей книге. Так ште...
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811918
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Slamayton, да, поведение отличается. Не уверен, что нужно исправлять.
Можно и оставить так. Только в help поставить варнинг об этой фиче.

А что с сериализацией? Получилось делать --continue?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811929
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton...
А что с сериализацией? Получилось делать --continue?По какому условию сохранять текущее состояние?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38811936
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНу... старина Циммерман слил его исходнички в своей книге. Так ште...Речь не об открытии исходников, а о предварительной упаковке шифруемого материала.
Вы сказали, что не знаете софта, который это делает, я указал на общеизвестный пример.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812040
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla,

у вас проверяется длина текста каждый раз после вывода сообщения, я правильно понял ?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812042
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже на алгоритм Анатолия, и мы с ним уже обсуждали этот момент. Если мой вывод выше правильный
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812143
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryОчень похоже на алгоритм Анатолия, и мы с ним уже обсуждали этот момент. Если мой вывод выше правильныйАга алгоритм одинаковый. Разница в реализации. У меня вывод наоборот.
Перевод числа в строку у Анатолия по другому сделан. Надо подумать и у себя так сделать. Хотя для "алфавита" переменной ширины (постановка по словарю), не так просто будет.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812290
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Slamayton...
А что с сериализацией? Получилось делать --continue?По какому условию сохранять текущее состояние?
Ну.... по сигналу SIGINT например.

https://ru.wikipedia.org/wiki/SIGINT

Как это сейчас реализовать на сях я еще нечитал... но в бытность на Борландах вроде делал.
Так что 99% должно срабоать.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812297
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот до кучи. Экземпл.
http://www.thegeekstuff.com/2012/03/catch-signals-sample-c-code/

P.S. Чортов интерфейс IDE. Не могу найти DVD-привод. Без этого Пингвин Тухс мне не брат.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812304
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Revision: 6
Author: mayton
Date: Thursday, November 20, 2014 5:01:29 PM
Message:
m_Sla: Ported into "C"
----
Modified : /branches/m_Sla/main.cpp

...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812384
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskynik_x,

Тут немного другое требуется.
Вместо того чтобы сгенерировать ровно один случайный пароль, как делает эта программа (и однострочник в первом ответе), надо сгенерировать ВСЕ пароли из заданного множества.
Собирать пробовали?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812387
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_x, чё такое pwxgen?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812391
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonnik_x, чё такое pwxgen?
Чё такое "Тяпничный pwdgen"?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812396
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто ты заскриншотил неизвестный софт. Вот я и спрашиваю. Что это?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812410
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пофиксил С++ - compatibility. Терь собирается плюсами. Добавил константный префикс.

Теперь можно так.

Код: plaintext
1.
$ pwdgen 4 digit prefix=Зима 
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812464
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_xСобирать пробовали?
Боже упаси :)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812663
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавил параметры запуска prefix=, suffix=, save=, continue=.

pwdgen 1 6 - Состояние сохраняется в файл pwdgen.sav
pwdgen 1 6 save=123.sav - Состояние сохраняется в файл 123.sav
pwdgen continue - Считываем состояние из pwdgen.sav и продолжаем работу
pwdgen continue=123.sav - Считываем состояние из 123.sav и продолжаем работу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>

char *partLower    = "abcdefghijklmnopqrstuvwxyz";
char *partDigit    = "0123456789";
char *partHex      = "ABCDEF";
char *partUpper    = "GHIJLKMNOPQRSTUVWXWY";
char *partPunct    = "!@#$%^&()-=+.,~`;/\\?*:|\"<>_";

char alphabet[256];

size_t num[256];
size_t scale_of_notation[256];
char *alphabet_num[256];
size_t len;
size_t min;
size_t max;
char file_name_to_save[256];
char prefix[256];
char suffix[256];


size_t stop = 0;

/////////////////////////////////////
void sig_handler(int signo)
{
    if (signo == SIGINT)
    {
        fprintf(stderr,"received signal\n");
        stop = 1;
    }
}
/////////////////////////////////////
void load()
{
    FILE * pFile = fopen (file_name_to_save,"r+");

    if (pFile!=NULL)
    {
        fscanf(pFile, "%d,%d,%d\r", &min, &max, &len);
        fscanf(pFile, "%s\r%s\r%s\r", file_name_to_save, prefix, suffix);
        if( strcmp( prefix, "(null)") == 0) prefix[0]=0;
        if( strcmp( suffix, "(null)") == 0) suffix[0]=0;

        for(size_t i=0; i<max+1; i++)
            fscanf(pFile, "%d,%d,", &num[i], &scale_of_notation[i]);
        fscanf(pFile, "\r");

        for(size_t i=0; i<max+1; i++)
        {
            alphabet_num[i] = calloc(256, 1);
            for(size_t k=0; k<scale_of_notation[i]; k++)
                fscanf(pFile, "%c\r", &alphabet_num[i][k]);
            fscanf(pFile, "\r");
        }

        char str[256]; str[0]=0;
        fscanf (pFile, "\r%s\r", &str[0]);
        if(strcmp( str, "m_Sla") != 0)
        {
            fprintf(stderr,"\nBad file.\n");
            exit(-10);
        }

        fclose (pFile);
    }
    else
    {
        fprintf(stderr,"\nCan't open file.\n");
    }
}
/////////////////////////////////////
void save()
{
    FILE * pFile = fopen (file_name_to_save,"w+");

    if (pFile!=NULL)
    {
        fprintf (pFile, "%d,%d,%d\r", min, max, len);
        if(!prefix[0])strcpy(prefix,"(null)");
        if(!suffix[0])strcpy(suffix,"(null)");
        fprintf (pFile, "%s\r%s\r%s\r", file_name_to_save, prefix, suffix);

        for(size_t i=0; i<max+1; i++)
            fprintf (pFile, "%d,%d,", num[i],scale_of_notation[i]);
        fprintf(pFile, "\r");

        for(size_t i=0; i<max+1; i++)
        {
            for(size_t k=0; k<scale_of_notation[i]; k++)
                fprintf (pFile, "%c\r", alphabet_num[i][k]);
            fprintf(pFile, "\r");
        }
        fprintf (pFile, "\rm_Sla\r");

        fclose (pFile);
    }
    else
    {
        fprintf(stderr,"\nCan't open file.\n");
    }
}
/////////////////////////////////////
void work()
{
    while(len <= max)
    {
        //вывод num
        char str[256];
        char *ptr_str = str;

        if(prefix[0])
        {
            char *ptr = prefix;
            while(*ptr)
            {
                *ptr_str++ = *ptr++;
            }
        }

        size_t i = 0;
        while(num[i])
        {
            *ptr_str = alphabet_num[i][num[i] - 1];
            i++;
            ptr_str++;
        }

        if(suffix[0])
        {
            char *ptr = suffix;
            while(*ptr)
            {
                *ptr_str++ = *ptr++;
            }
        }

        *ptr_str = 0;
        puts(str);

        if(stop)
        {
            save();
            break;
        }

        // увеличиваем num на 1
        i = 0;
        size_t carry = 0;
        do
        {
            num[i]++;
            if(num[i] > scale_of_notation[i])
            {
                num[i] = 1;
                carry = 1;
            }
            else
            {
                carry = 0;
            }

            i++;
        }
        while(carry);
        if(i > len) len=i;
    }
}
/////////////////////////////////////
void run( char *alphabet)
{
    // инициализация
    if(!file_name_to_save[0])
        strcpy(file_name_to_save,"pwdgen.sav");

    len = min;
    for(size_t i=0; i < min; i++)
        num[i] = 1;

    for(size_t i=0; i <= max; i++)
    {
        alphabet_num[i]=alphabet;
        scale_of_notation[i]=strlen(alphabet);
    }

    work();
}/////////////////////////////////////

struct option_result
{
    size_t code;
    char *param;
};

struct option
{
    char *opt;
    size_t code;
};

struct option options[] =
{
    {"lower",1},
    {"punct",2},
    {"upper",3},
    {"xdigit",4},
    {"digit",5},
    {"\0x00",0}
};

struct option options2[] =
{
    {"prefix=",1001},
    {"suffix=",1002},
    {"save=",1003},
    {"\0x00",0}
};

/////////////////////////////////////
struct option_result find_option(char *option)
{
    struct option_result result = {0,0};

    for(size_t i=0; *options[i].opt; i++)
        if (strcmp( option, options[i].opt) == 0)
        {
            result.code = options[i].code;
            options[i].code = 0;
            return result;
        }

    for(size_t i=0; *options2[i].opt; i++)
        if (strstr( option, options2[i].opt) != NULL)
        {
            result.param = strstr( option, options2[i].opt) + strlen(options2[i].opt);
            result.code = options2[i].code;
            options2[i].code = 0;
            return result;
        }

    return result;
}
/////////////////////////////////////
int main(int argc,char **arg, char **env)
{
    if (signal(SIGINT, sig_handler) == SIG_ERR)
        fprintf(stderr,"\ncan't catch SIGINT\n");

    if (argc > 1 && strstr( arg[1], "continue")  != NULL)
    {
        fprintf(stderr,"Continue.\n");

        if( *(arg[1] + strlen("continue")) )
            strcpy(file_name_to_save, arg[1] + strlen("continue") + 1);
        else
            strcpy(file_name_to_save,"pwdgen.sav");

        fprintf(stderr,"Read: %s\n", file_name_to_save);

        load();
        work();
        return 0;
    }
    if (argc < 3)
    {
        fprintf(stderr,"\nPassword Generation 2.0 (c) m_Sla and SQL.RU. Written in 'C' :)\n");
        fprintf(stderr,"Special thnx to: Mayton, Dima T.\n");
        fprintf(stderr,"\nUsage: pwdgen [n | continue=] [m] [options..] \n");
        fprintf(stderr,"\n       continue=  - Filename");
        fprintf(stderr,"\nWhere: options:\n");
        fprintf(stderr,"\n       lower      - Lowercase alphabetic characters [a..z]");
        fprintf(stderr,"\n       punct      - Punctuation characters [,!?..]");
        fprintf(stderr,"\n       upper      - Uppercase alphabetic characters [A..Z]");
        fprintf(stderr,"\n       xdigit     - Hexidecimal characters");
        fprintf(stderr,"\n       digit      - Numeric digits [0..9]");
        fprintf(stderr,"\n       prefix=    - Various text prefix in begin of password phraze like 'Passw_'");
		fprintf(stderr,"\n       suffix=    - Various text suffix");
		fprintf(stderr,"\n       save=      - Filename");
        fprintf(stderr,"\n");
        return -1;
    }
    else
    {
        min = atoi(arg[1]);
        max = atoi(arg[2]);
        if( min > 255) min=255;
        if( max > 255) max=255;

        if(max < min)
        {
            fprintf(stderr,"\n[m] cannot be less than [n]!\n");
            return -3;
        }

        if (argc==3)
        {
            strcat(alphabet, partLower);
            run( alphabet );
            return 0;
        }
        else
        {
            size_t i = 3;
            while(i<argc)
            {
                struct option_result result=find_option(arg[i]);
                switch(result.code)
                {
                case 1: // lower
                    strcat(alphabet,partLower);
                    break;
                case 2: // punct
                    strcat(alphabet,partPunct);
                    break;
                case 3: // upper
                    strcat(alphabet,partHex);
                    strcat(alphabet,partUpper);
                    break;
                case 4: // xdigit
                    strcat(alphabet,partDigit);
                    strcat(alphabet,partHex);
                    break;
                case 5: // digit
                    strcat(alphabet,partDigit);
                    break;

                case 1003: // save=
                    if(strlen(result.param))
                        strcpy(file_name_to_save,result.param);
                    break;
                case 1001: // prefix=
                    if(strlen(result.param))
                        strcpy(prefix,result.param);
                    break;
                case 1002: // suffix=
                    if(strlen(result.param))
                        strcpy(suffix,result.param);
                    break;
                }
                i++;
            }

            if(!strlen(alphabet)) strcat(alphabet, partLower);
            run( alphabet );
        }
    }
    return 0;
}
/////////////////////////////////////

...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812702
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Круть. Pwdgen практически готов. Далее - будет более сложная
задача. Ждите новых тяпничных хакатонов.

Мне нужно провести кое-какие исследования DES-кодера.
В частности уйти от дискретности и подойти к непрерывности.
Без этого невозможно решать поиск DES-key для большинства
типовых файловых заголовков.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812744
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ частности уйти от дискретности и подойти к непрерывности

Как заговорили на CPP :D
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812947
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

Это понты :)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38812954
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верно. Это пятничные понты.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813123
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКруть. Pwdgen практически готов. Далее - будет более сложная задача
жду последнюю версию(до более сложной задачи), надеюсь вы её покажете :)
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813218
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Revision: 9
Author: mayton
Date: Friday, November 21, 2014 1:11:13 PM
Message:
m_Sla: some changes.
----
Modified : /branches/m_Sla/main.cpp

...
Рейтинг: 0 / 0
25 сообщений из 188, страница 7 из 8
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]