Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
nubo
113 / 70 / 8
Регистрация: 31.07.2010
Сообщений: 334
#1

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

06.08.2010, 01:48. Просмотров 1846. Ответов 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;
}
благодарю за терпение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2010, 01:48     Шифратор пароля. Покритикуйте пожалуйста.
Посмотрите здесь:

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

Покритикуйте код - C++
Покритикуйте код, я точно знаю, что он нубовский но все же. Это моя первая программа на с++ которая делает , что то полезное и типо мой...

Покритикуйте код - C++
Есть класс Студенты (реализован через односвязный список), хотел бы услышать критику по поводу его улучшения, если кому не лень разбираться...

Графы. Покритикуйте код - C++
Нужно помощь тех кто работает и пишет хороший и красивый код. У меня построено три матрицы, подскажите как улучшить код. Где можно...

Покритикуйте мою игру - C++
Выкладываю код своей первой игры. Она готова процентов на 90, но уже работает. Интересно узнать мнение людей, что в ней можно улучшить,...

Простой шифратор - C++
Задача такая: пользователь вводит четырехзначное число, после этого программа отображает это число в шифрованном виде. Шифрование...

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

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

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

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

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

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

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

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

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

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

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

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

Найти коллизию невозможно, ибо подобрать варианты к шифру из 20000 символов - нереальная задача в реально обозримом будущем. Боюсь даже подсчитать количество вариантов.
Что то страшно приближающееся к гуголу.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.08.2010, 08:31     Шифратор пароля. Покритикуйте пожалуйста. #24
что-то непонятно

Код
[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]$
а где шифрование
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2010, 12:13     Шифратор пароля. Покритикуйте пожалуйста.
Еще ссылки по теме:

Покритикуйте код финкции нахождения интеграла - C++
typedef double(*tfunc)(double); double integral(double start, end, func f, double dx) { double left, right, result; for (x=start,...

Написать шифратор\дешифратор на С++ - C++
Напишите программу, выполняющую следующие действия (в начале программы выводится запрос о том, какое из действий необходимо выполнить): ...

Как написать шифратор? - C++
Нужна программа, которая в РУССКОМ тексте заменяет буквы на другие символы. Например: буква &quot;Н&quot; - это символ &quot;=&quot;. Визуально, программа...

Покритикуйте и помогите улучшить код моей игры - C++
Здравствуйте, недавно начал писать игру и собственно пишу потихоньку, но не в этом суть, просто я только сегодня понял, что мой код может...


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

Или воспользуйтесь поиском по форуму:
nubo
113 / 70 / 8
Регистрация: 31.07.2010
Сообщений: 334
07.08.2010, 12:13  [ТС]     Шифратор пароля. Покритикуйте пожалуйста. #25
В первом посте полная программка. Только нужно создать папку data, куда она файлы сложит.
Yandex
Объявления
07.08.2010, 12:13     Шифратор пароля. Покритикуйте пожалуйста.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru