powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничный pwdgen
13 сообщений из 188, страница 8 из 8
Тяпничный pwdgen
    #38813310
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymaytonКруть. Pwdgen практически готов. Далее - будет более сложная задача
жду последнюю версию(до более сложной задачи), надеюсь вы её покажете :)
Коллеги.

Я ухожу в хибернейт на выходные. Буду долго думать над DES-encoder-ом
И нечёткой логикой. Буду ставить этот чортов Пингвин на 32-битный сарай с IDE
диском. Буду собирать статистику по сигнатурам. Буду есть яблоки и печеньки.

А вы не скучайте. Вот вам обещаный пятничный хакатон.
http://www.sql.ru/forum/1128071/tyapnichnyy-animated-gif-chessplayer

Удачи.

P.S. Возможно я и появлюсь здесь если появятся новости.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813374
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton Буду ставить этот чортов Пингвин на 32-битный сарай с IDE
диском.
Оно тебе надо? Сначала нудное шаманство с дровами, потом будет жужжать дряхлыми вентиляторами и винтом хрустеть :)

Не проще в виртуалке запустить?
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813383
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрим. Может и не надо. Часик два потрачу на него - потом плюну. Ноут тоже
слабоват для виртуалок. По диску слабоват. 2.5-inch HDD. При том что уменя вечно
открыта среда разработки с дебагом.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813414
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставишь, затести производительность, бенчмарки позапускай какие-нибудь.
Я так понял у тебя там какой-то селерон времен мамонтов. Если так, то виртуалка в современном смартфоне и та быстрее может оказаться.
Народ виндовс на часы ставит в эмулятор x86 (считай программная эмуляция проца)
http://geektimes.ru/post/239317/


PS Нашел тут год назад в завалах ноут Pentium-M 1,5 ГГц 512 памяти, пыль сдул, поставил туда пингвина (не без шаманства с дровами), грузится, работает, по инету можно еще полазить, а примитивные флэш игры томозят как пошаговые стратегии.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38813446
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1. Я уже много раз ворчал что ноуты и планшеты покупают не под задачи а под современный
браузер и кино в H.264.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38814111
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погонял тесты, тормозит puts.
Для вывода сделал буфер:
Код: 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.
354.
355.
356.
357.
358.
359.
360.
361.
362.
#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()
{
    char *str = malloc(1024*1024);
    char *ptr_str = str;

    while(len <= max)
    {
        //вывод num
        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++ = '\n';

        if(ptr_str - str > 1024*1024 - 256)
        {
            *ptr_str = 0;
            puts(str);
            ptr_str = 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;
    }

    *ptr_str = 0;
    puts(str);
    free(str);
}
/////////////////////////////////////
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;
}
/////////////////////////////////////

В итоге с "pwdgen 6 6 prefix=_Passsssssssssssssss suffix=_Passsssssssssssssss > 123.lst" мой ssd не справился
Средняя скорость получилась 189 Мбайт/сек.
Надо более быстрый ssd
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38814152
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaВ итоге с "pwdgen 6 6 prefix=_Passsssssssssssssss suffix=_Passsssssssssssssss > 123.lst" мой ssd не справился
Средняя скорость получилась 189 Мбайт/сек.
Круть. Закоммитил. Думаю на этом можно остановиться. В конвейере с генерацией ключа и
прочими процедурами pwdgen уже не будет являться bottleneck-ом.

P.S. Щас занимаюсь FuzzyLogic. Для вентилей AND/OR/NOT всё успешно. Но для XOR
есть трудности.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38814153
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо более быстрый ssd
Не стоит. Нужен обычный хард с файловой системой расчитанной на
огромное количество мелких файлов. Возможно ReizerFS...
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38814260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я собрал статистику по 25 тысячам jpeg файлам что у меня нашлись локально.
Точнее по их заголовкам (первые 512 бит). Цифру 512 я взял из расчёта
возможной полезности при анализе блочных шифров.

Следующая биткарта показывает заголовок. Биты идут в порядке старшинства.
Знаком ? отмечены шумящие поля.

Код: plaintext
1.
2.
3.
4.
11111111 11011000 11111111 1110???? 00000000 ???????0 0100???? 01?????0 01?01?01 01?00110 00?00000 0000000? 0??0?0?? 0?00?00? 00?0???? ???????? 
0000???? ???????? 00?00000 0?0000?0 ???????? ???????? 00?????? ???????? 0?0????? 0??????? 0??????? 0??????? 0??????? 0??????? 0??????? 0??????? 
0??????? 0??????? 0??????? 0??????? 0??????? 0??????? ???????? ???????? ???????? ???????? 0??????? ???????? ???????? ???????? 0??????? 0??????? 
???????? 0??????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? 0??????? ???????? ???????? ???????? ???????? 0??????? ????????



Более подробная гистограмма (для экономии места привожу первые 64 бит). Под спойлер.

Код: 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.
0 : 0.998899 
1 : 0.999429 
2 : 0.999185 
3 : 0.999185 
4 : 0.999226 
5 : 0.999755 
6 : 0.999389 
7 : 0.999429 
8 : 0.998777 
9 : 0.999796 
10 : 0.000122 
11 : 0.998859 
12 : 0.999755 
13 : 0.000122 
14 : 0.000041 
15 : 0.000693 
16 : 0.998818 
17 : 0.999837 
18 : 0.998818 
19 : 0.999144 
20 : 0.998859 
21 : 0.999837 
22 : 0.999511 
23 : 0.998777 
24 : 0.998818 
25 : 0.999185 
26 : 0.999266 
27 : 0.003750 
28 : 0.012106 
29 : 0.011332 
30 : 0.011209 
31 : 0.029593 
32 : 0.000041 
33 : 0.001875 
34 : 0.003057 
35 : 0.004198 
36 : 0.003505 
37 : 0.003424 
38 : 0.002935 
39 : 0.005910 
40 : 0.024212 
41 : 0.024579 
42 : 0.027759 
43 : 0.962989 
44 : 0.013737 
45 : 0.037215 
46 : 0.036196 
47 : 0.006073 
48 : 0.000489 
49 : 0.998981 
50 : 0.000489 
51 : 0.000489 
52 : 0.959605 
53 : 0.032161 
54 : 0.962092 
55 : 0.037745 
56 : 0.000041 
57 : 0.998573 
58 : 0.039702 
59 : 0.029104 
60 : 0.032120 
61 : 0.966902 
62 : 0.959687 
63 : 0.003057 



Как видим для блочного DES-анализа JPEG является трудной мишенью. Биты шумят и уменя пока нет
аппарата который позволил-бы делать обратную операцию для протаскивания шумящей характеристики
через все раунды DES.

А вот PNG более удачен. Его сигнатура фиксирована и выглядит так.

89 50 4E 47 0D 0A 1A 0A

Собраны также характеристики еще по 5 други популярным форматам.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38829580
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне так и не удалось сформировать алгебру нечеткой логики для операции XOR.
Я для себя выяснил что probability A XOR B нельзя расчитать зная просто
prob(A), prob(B) как в случаях с NOT/OR/AND.

prob(A XOR B) возможно удастся выразить через корреляцию.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38829860
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борхес. Этот чортов старик учУдил офигенскую формулу. Все книги мира.
Даже еще не написанные.

Код: plaintext
1.
$ pwdgen 1312000 custom=abcdefghijklmnopqrstuvwxyz.,_



По его версии 410 страниц отпечатанных на латыни (английский)
в формате 80 на 40 знаков - это офигенский универсум. И как-бе
включает в себя и Библию и Коран и дофигища еретических учений.
Кириллицу и всё остальное он поскипал. Ну да ладно. Допилим потом.

P.S. Правда Борхес требует вместо символа _ поставивить пробел. Но я допилю это
чуть позже. И чтобы не создавать весьма унылую картину монотонной последовательности
обязательно нужна опция shuffle=yes.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38843704
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артур Кларк. 9 000 000 000 имён Бога.

Правда внешний вид символа Писатель не упоминает.
Пускай будут буквы от 'a' до 'i'

Код: plaintext
1.
$ pwdgen 9 custom=abcdefghi | filter3letter >> out.txt


классик - Назовите это культом, если хотите, но речь идет о важной составной
части нашего вероисповедания. Употребляемые нами имена Высшего Существа -
Бог, Иегова, Аллах и так далее - всего-навсего придуманные человеком ярлыки.
Тут возникает довольно сложная философская проблема, не стоит сейчас ее
обсуждать, но среди всех возможных комбинаций букв кроются, так сказать,
действительные имена бога. Вот мы и пытаемся выявить их, систематически
переставляя буквы.
- Понимаю. Вы начали с комбинации ААААААА... и будете продолжать, пока
не дойдете до ЯЯЯЯЯЯЯ...
- Вот именно. С той разницей, что мы пользуемся азбукой, которую
изобрели сами. Заменить литеры в пишущем устройстве, разумеется, проще
всего. Гораздо сложнее создать схему, которая позволит исключить заведомо
нелепые комбинации. Например, ни одна буква не должна повторяться более трех
раз подряд.
- Трех? Вы, конечно, хотели, сказать - двух.
- Нет, именно трех. Боюсь, что объяснение займет слишком много времени,
даже если бы вы знали наш язык.
...
Рейтинг: 0 / 0
Тяпничный pwdgen
    #38881218
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Revision: 12
Author: mayton
Date: Monday, February 16, 2015 10:53:37 PM
Message:
performance improovement
----
Modified : /src/pwdgen.c


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


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