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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Если в C++ аналог оператора with в Pascal? http://www.cyberforum.ru/cpp-beginners/thread157684.html
Если в C++ аналог оператора with в Pascal?
C++ С++ устаревает?? С++ устаревает?? Или ещё нет? http://www.cyberforum.ru/cpp-beginners/thread157681.html
Как запустить system ("cls")? C++
Собственно, подскажите, что нужно прописать, чтобы функция system("cls") заработала.
Загрузка файла с интернет-сайта C++
Здраствуйте, я новечок в разработке и мне очень нужна помощь. Дали задание подать запрос к сайту ( http://www.namesite.com/tmansfen/News//1/0/1/0) и стянуть с него новости (XML-файл) при этом сгенерировать MD5 и тоже прикрепить для проверки .... Есть ли встроенные функции которые отправляют запрос и получают ответ от сайта и как примерно это организовывается.. если можно подробнее.. заранее...
C++ Порядок инициализации полей в конструкторе http://www.cyberforum.ru/cpp-beginners/thread157664.html
Имеется некий класс T. В нём имеются поля m_F1 (указатель) и m_F2 (неважно). Конструктор выглядит так: T::T() : m_F1 (new ...), m_F2 (m_F1->...) В момент инициализации поля m_F2 оказывается, что m_F1 неинициализировано. Я правильно понимаю, что при такой инициализации стандарт не гарантирует порядок инициализации полей? Или я что-то не так делаю?
C++ Почему функция не может вернуть массив, но может вернуть структуру содержащий массив? Почему функция не может вернуть массив, но может вернуть структуру содержащую массив? Согласитесь что это некоторое несовершенство языка... подробнее

Показать сообщение отдельно
nubo
 Аватар для nubo
112 / 69 / 8
Регистрация: 31.07.2010
Сообщений: 334
06.08.2010, 01:48     Шифратор пароля. Покритикуйте пожалуйста.
Это моя первая программка на С++, если кому не лень, натычте меня носом в ляпы.
Чтобы не топтаться по граблям.

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;
}
благодарю за терпение.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru