Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337

Шифратор пароля. Покритикуйте пожалуйста.

06.08.2010, 01:48. Показов 3221. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это моя первая программка на С++, если кому не лень, натычте меня носом в ляпы.
Чтобы не топтаться по граблям.

C++
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
#include <iostream>
#include <string>
#include <ctime>
#include <fstream>
 
using namespace std;
 
char randChar()
{
    int n, i = 0;
 
    while(i < 500)
    { 
        n = -32 + rand() % 210;
 
        if((n > -32 && n < -15) || (n > 33 && n < 176))
        {
            i++;
            return char(n);
        } 
    }
}
 
 
int encodePass(string main_pass, string new_pass, string resours_name)
{
 
    int num;
    string code, len_pass;
    size_t new_len  = new_pass.size();
    size_t main_len = main_pass.size();
    size_t max_len, code_len;
 
    srand(time(0));
    resours_name = "data\\"+ resours_name +".txt";
 
    if(main_len <= new_len)
    {
        for(int i = main_len - 1; i < new_len; ++i)
            main_pass += main_pass;
 
        max_len = main_pass.size();
    }
    else
        max_len = new_len + 1; 
 
    len_pass = char(new_len + 100);
 
    for(int j = 0; j < max_len; ++j)
    {
        if(j > new_len)
            break;
 
            num = abs((int)main_pass[j]);
 
        for(int i = 0; i < num; ++i)
            code += randChar();
 
        if(j == 0)
            code += len_pass;
        else
            code += new_pass[j - 1];
    }
 
    code_len = code.size();
 
    if(code_len < 20000)
        for(int i = code_len; i < 20000; ++i)
            code  += randChar();    
 
    ofstream ofs;
    ofs.open(resours_name.c_str());
    ofs << code;
    ofs.close();
        cout << "Готово\n";
    return 0;
}
 
 
int decodePass(string main_pass, string resours)
{
    int num = 0, pos = -1, len_pass;
    string code_pass, pass, cript, file_name;
    file_name = "data\\"+ resours +".txt";
    size_t max_len = main_pass.size();
 
    ifstream ifs; 
    ifs.open(file_name.c_str());
        if(!ifs)
        {
            cout << "Не найден файл с паролем для ресурса " << resours <<"\n";
            return EXIT_FAILURE;
        }
    ifs >> code_pass;
 
    cript = main_pass;
 
    for(int i = 0; i < 30; ++i)
        cript += main_pass;
 
    max_len = cript.size();
 
    for(int j = 0; j < max_len; ++j)
    {
        num = abs((int)cript[j]);
        pos = pos + num + 1;
 
        if(j == 0)
            len_pass = (int)code_pass[pos] - 100;
        else
            pass  += code_pass[pos];
 
        if(j > len_pass - 1)
            break;
    }
 
    if(pass != "")
        cout << "Пароль к ресурсу "<< resours <<" - "<< pass << endl;
    else
        cout << "Основной пароль введен неверно. Включилась система самоликвидации. "<< endl;
 
    return 0;
}
 
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    string select, main_pass, new_pass, resours_name;
    cout << "Для шифрации пароля введите 1, для дешифрации 2  ";
    getline(cin, select);
 
 
     while(true)
     {
        if(select == "1")
        {
 
            while(true)
            {
                cout << "Введите и запомните основной пароль (минимум 3 символа, максимум 30) ";
                getline(cin, main_pass);
 
                if(main_pass.size() > 2 && main_pass.size() < 31 )
                    break;
                else
                    cout << "Слишком короткий либо слишком длинный пароль\n";
            }
 
            cout << "Введите название ресурса, для которого предназначен пароль ";
            getline(cin, resours_name);
 
            while(true)
            {
                cout << "Введите пароль, который нужно зашифровать (минимум 3 символа, максимум 30)";
                getline(cin, new_pass);
 
                if(new_pass.size() > 2 && new_pass.size() < 31 )
                    break;
                else
                    cout << "Слишком короткий либо слишком длинный пароль\n";
            }
                        
            encodePass(main_pass.c_str(), new_pass.c_str(), resours_name.c_str());
            break;
        }
        
        if(select == "2")
        {
            cout << "Введите название ресурса, для которого предназначен пароль ";
            getline(cin, resours_name);
            cout << "Введите основной пароль ";
            getline(cin, main_pass);
            decodePass(main_pass.c_str(), resours_name.c_str());
            break;
        }
        else
        {
            cout << "Для шифрации пароля введите 1, для дешифрации 2 ";
            getline(cin, select);
        }
     }          
  
   return 0;
}
благодарю за терпение.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2010, 01:48
Ответы с готовыми решениями:

Покритикуйте пожалуйста программу
Student.h#ifndef _STUDENT_H #define _STUDENT_H class Student { public: Student(); void del(); ...

Пожалуйста, покритикуйте код
Стиль, логика, реализация, все что угодно. Заранее благодарен за любые замечания или советы. Делал в VS 2015 Задача 1, вывод даты...

Покритикуйте пожалуйста
Здравствуйте. Моя первая разведеная плата - покритикуйте пожалуйста. Это просто штука на 48 меге (на плате написано 8-я, потому что она...

24
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
06.08.2010, 18:22  [ТС]
Студворк — интернет-сервис помощи студентам
fasked,
Оффтопить не хочется, но твой алгоритм не удовлетворяет ни одному требованию современной криптографии.
Ну это не совсем оффтоп, по теме все же. Тема - покритикуйте. Ни где не сказано про код. Алгоритм тоже критиковать можно. Обоснуй плиз, каким таким требованиям?
Криптографией математики должны заниматься, а не программисты самоучки.
Никак не могу согласиться... для изобрететения колеса человеко совсем не требовалось знать уравнение описания окружности на плоскости. А с криптографией я не первый день занимаюсь. И пусть на дилетантском уровне, но все же представление имею.

Что бы расшифровать любой шифр нужны хоть какие то исходные данные. В моем случае их просто нет.
Причем сам алгоритм шифрования (буде известным криптографу) совершенно ничем не поможет расшифровке. Есть набор одинаковых символов. Нет
1. длинны зашифрованного сообщения
2. длинны ключа
3. сопостовления (невозможно узнать точку отсчета и позиции нужных символов, не зная ключа, символы используются те же самые, что и в самом сообщении)

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

Вся прелесть этого алгоритма в том, что никто ничего не прячет. Это тоже самое, что пытаться узнать, на какой из 20000 предметов взглянул человек неделю назад. Причем предметов несколько.

Я спорить не стану, может конечно можно, применив тот же самый словарь, и имея на вооружении стопицот самых мощьных компьютеров вычислить пароль плана моясобакарэкс. Но вот такой - 6yhеПмlt8%cshw даже теоретически невозможно.

А эта утилитка придумывалась не столько как шифратор, сколько как памятка. Чтобы зная один простой пароль не запоминать и не записывать кучу сложных.

Ведь проблема достаточно серьёзная. Либо нужно использовать везде один сложный пароль (что бы не забыть), либо кучу простых (что опасно, да и тоже забывается).

#pragma,
Я не имел ввиду брутфорс,я про то,чтобы не хранить сам пароль,а только его хеш. А при вводе пользователем пароля он сначала хешируется,а потом сравнивается с готовым хешем.
не понял... а в чем затык? Ну вычислить хэш введенного пароля и сравнить со слепком...
0
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
06.08.2010, 18:28
* или просто больше 155
Цитата Сообщение от nubo Посмотреть сообщение
Ведь проблема достаточно серьёзная. Либо нужно использовать везде один сложный пароль (что бы не забыть), либо кучу простых (что опасно, да и тоже забывается).
Можно просто завести блокнотик с паролями
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
07.08.2010, 00:51  [ТС]
А вот ещё немного не понял,а что будет,если тут
будет два момента. Либо погибнет комп, либо сработает ограничение на длину вводимого пароля
У меня она ограничена 30 символами. Вполне достаточно на сегодняшний момент.

Добавлено через 6 часов 19 минут
Можно просто завести блокнотик с паролями
так это и есть по сути блокнотик Только нечитаемый без ключа.

Задумка в перспективе такая, что запустив эту программку можно, набрав пароль плана "Вася", получить в буфер пароль плана
no&ВfпО№б!оы%hS. Ну а потом использовать по назначению. Причем запомнить достаточно один простенький пароль, все равно расшифровке ничего не подлежит. Ну если не использовать в качестве пароля для ресурса что то типа 12345.

Выгода простая - не нужно запоминать такие сложности для каждого ресурса и можно спать спокойно, не опасаясь троянов.
Ну и пусть прут эти файлы, толку то нет.

Вот и решается дилема - делать сложный пароль и хранить непонятно где, или простой и хранить в голове.

Найти коллизию невозможно, ибо подобрать варианты к шифру из 20000 символов - нереальная задача в реально обозримом будущем. Боюсь даже подсчитать количество вариантов.
Что то страшно приближающееся к гуголу.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.08.2010, 08:31
что-то непонятно

Code
1
2
3
4
5
6
7
8
9
[guest@station tmp]$ ./t
Введите и запомните основной пароль (минимум 3 символа, максимум 30) abcd
Введите пароль, который нужно зашифровать (минимум 3 символа, максимум 30)aaa
Результат: -------------------------------------------------------------------------------------------------g--------------------------------------------------------------------------------------------------a---------------------------------------------------------------------------------------------------a----------------------------------------------------------------------------------------------------a
[guest@station tmp]$ ./t
Введите и запомните основной пароль (минимум 3 символа, максимум 30) abcd
Введите пароль, который нужно зашифровать (минимум 3 символа, максимум 30)bbb
Результат: -------------------------------------------------------------------------------------------------g--------------------------------------------------------------------------------------------------b---------------------------------------------------------------------------------------------------b----------------------------------------------------------------------------------------------------b
[guest@station tmp]$
а где шифрование
0
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
07.08.2010, 12:13  [ТС]
В первом посте полная программка. Только нужно создать папку data, куда она файлы сложит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.08.2010, 12:13

Покритикуйте пожалуйста
Всем добрейшего вечера уважаемые знатоки! Решил собрать себе десктоп для онлайн игрушек-пострелушек. Разнесите пож. в пух и прах,...

Покритикуйте, пожалуйста!
Уважаемые форумчане! Есть ресурс - vladeniya.tv. Ваше мнение? Привлекателен ли он в таком виде для посетителей, рекламодателей и...

Покритикуйте пожалуйста
Для начала соответстие правилам: Добавленая ценность - ХЗ кому это полезно, но с чего-то начинать надо 1 Контент не воровоный,...

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

Пожалуйста покритикуйте сборку
Нужен тихий игровой без разгона Процессор процессор Intel Core i7-4770, O кулер Thermalright HR-02 Macho rev. A ил Thermaltake...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru