Форум программистов, компьютерный форум 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, 14:07  [ТС]     Шифратор пароля. Покритикуйте пожалуйста.
Спасибо.

Какой же я всетки тугодум. Никак не могу уловить простых вещей...
Вот этот пример мне совершенно ясен и понятен. Только он немного не в тему.

Смысл всей этой аферы в том, что мне нужно не просто сгенерировать случайную строку нужной длинны. Мне нужно расставить символы шифруемого пароля на позиции, соответствующие кодам символов основного. А для этого нужно сначала привести его в удобоваримую форму.
1. Заменить первый символ другим, код которого соответствует длине шифруемого.
2. Увеличить его за счет повторений самого себя (конкатенация)
3. Узнать получившуюся длину.
4. В цикле считать посимвольно и определить код каждого символа.
Ну еще там пара моментов.

Так вот что получается. Что бы выполнить пункт 1, предаваемый тип должен быть один. Чтобы 2 - другой. И так далее. Получилось у меня только с типом string.

Вот тут упростил, чтобы было понятнее (работает):
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
#include <iostream>
#include <string>
#include <ctime>
 
using namespace std;
 
int encodePass(string main_pass, string new_pass)
{
 
    int num;
    string code, len_pass;
    size_t max_len, new_len  = new_pass.size(), main_len = main_pass.size();
 
    srand(time(0));
 
 
    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 += "-";
 
        if(j == 0)
            code += len_pass;
        else
            code += new_pass[j - 1];
    }
    
    cout << "Результат: " << code << endl;
    return 0;
}
 
 
int main()
{
    setlocale( LC_ALL,"Russian" );
 
    string main_pass, new_pass;
 
                cout << "Введите и запомните основной пароль (минимум 3 символа, максимум 30) ";
                getline(cin, main_pass);
                cout << "Введите пароль, который нужно зашифровать (минимум 3 символа, максимум 30)";
                getline(cin, new_pass);
                        
                encodePass(main_pass, new_pass);
         
  
   return 0;
}
Никак не пойму, какие типы куда приторочить по другому...

Добавлено через 12 минут
с комментариями
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
#include <iostream>
#include <string>
#include <ctime>
 
using namespace std;
 
int encodePass(string main_pass, string new_pass)
{
 
    int num;
    string code, len_pass;
    size_t max_len, new_len  = new_pass.size(), main_len = main_pass.size();
 
    srand(time(0));
 
 
    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 += "-"; // заполняю строку мусором
 
        if(j == 0)
            code += len_pass; // первый символ для определения длины зашифрованного пароля
        else
            code += new_pass[j - 1]; //вставляю символ шифруемого на свою позицию
    }
    
    cout << "Результат: " << code << endl;
    return 0;
}
 
 
int main()
{
    setlocale( LC_ALL,"Russian" );
 
    string main_pass, new_pass;
 
                cout << "Введите и запомните основной пароль (минимум 3 символа, максимум 30) ";
                getline(cin, main_pass);
                cout << "Введите пароль, который нужно зашифровать (минимум 3 символа, максимум 30)";
                getline(cin, new_pass);
                        
                encodePass(main_pass, new_pass);
         
  
   return 0;
}
 
Текущее время: 11:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru