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

Сравнение строк, чисел и т.д - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 18:20     Сравнение строк, чисел и т.д #1
Вот, допустим, хочу я сделать проверку пароля
Пишу:
C++
1
2
3
4
5
int main () {
string login = "qwerty123";
cout << "Enter password: ";
cin >> login;
}
И нужно сделать проверку пароля, с правильным паролем

Пробовал так:
C++
1
2
3
if (str login, "qwerty123") {
cout << "Valid login!";
}
Но не работает, такое, как я помню (статью читал), используется с char'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 18:20     Сравнение строк, чисел и т.д
Посмотрите здесь:

C++ Сравнение строк
Сравнение строк C++
C++ Сравнение строк
C++ Сравнение строк
Сравнение строк C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
02.08.2013, 18:50     Сравнение строк, чисел и т.д #2
Но не работает, такое, как я помню (статью читал), используется с char'ами
Так как же сравнить строку?
Или, допустим, числа, ведь всё может понадобиться
Сравнение строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
#include <conio.h>
 
void _tmain()
{
    char* u_log = "qwerty";
    char* login = "qwerty";
 
    if(strcmp(u_log, login) == 0)
        cout << "Good =)";
    else
        cout << "Error!!!";
 
    _getch();
}
функция strcmp(s1, s2) сравнивает две строки и если s1 = s2, то результат равен 0. Если s1 < s2, то отрицательный, s1 > s2 - положительный.
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 18:54  [ТС]     Сравнение строк, чисел и т.д #3
А можно ли как-то сравнить string'и (*trollface*), int'ы?
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
02.08.2013, 18:57     Сравнение строк, чисел и т.д #4
Цитата Сообщение от Даниил Посмотреть сообщение
А можно ли как-то сравнить string'и (*trollface*), int'ы?
ты в консоли пишешь? или форма?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 18:57     Сравнение строк, чисел и т.д #5

Даниил, просто стоит изучить основы языка, хотя желание написать что-то своё похвально.
Но тут могу тебя огорчить: такую проверку пароля:
C++
1
if(strcmp(u_log, login) == 0)
легко взломают

dmal, забыл. Новичок не догадается вставить
C++
1
#include <string.h>
dmal
 Аватар для dmal
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 139
02.08.2013, 19:00     Сравнение строк, чисел и т.д #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение

Но тут могу тебя огорчить: такую проверку пароля:
C++
1
if(strcmp(u_log, login) == 0)
легко взломают
Ну вопрос был в том, что как сравнить строки =)
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
02.08.2013, 19:00     Сравнение строк, чисел и т.д #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
 
int main() {
    string s1 = "qwerty", s2;
    cout << "enter password: ";
    cin >> s2;
    s2 == s1 ? cout << "ok\n" : cout << "no\n";
    return 0;
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
02.08.2013, 19:14     Сравнение строк, чисел и т.д #8
Тогда уж
C++
1
cout << (s2 == s1 ? "ok\n" : "no\n");
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
02.08.2013, 19:43     Сравнение строк, чисел и т.д #9
Нехорошо это - пароли в явном виде хранить.
Любой желающий сможет открыть бинарник в блокноте и подсмотреть пароль (который может и в других местах использоваться).
Лучше хранить хэш, по которому невозможно точно восстановить пароль.
Но и это не защитит от взлома, достаточно будет просто убрать условый переход.
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 19:44     Сравнение строк, чисел и т.д #10
Kuzia domovenok, а посредством чего можно взломать такой пароль?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
02.08.2013, 19:48     Сравнение строк, чисел и т.д #11
dima55501, Заглядывания в бинарник.
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 19:55     Сравнение строк, чисел и т.д #12
ForEveR, а можно поподробнее? Вот я только что написал такую программу. .exe файл лежит у меня на рабочем столе. Как мне узнать что находится в char'е?

Код
int main()
{
     char *test = "qwerty";
     return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 19:57     Сравнение строк, чисел и т.д #13
открой в блокноте же!
Цитата Сообщение от dima55501 Посмотреть сообщение
Kuzia domovenok, а посредством чего можно взломать такой пароль?
Цитата Сообщение от diagon Посмотреть сообщение
открыть бинарник в блокноте и подсмотреть пароль
А помимо блокнотов есть дизассемблеры, отладчики, хекс-редакторы... что там ещё есть?
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 20:00     Сравнение строк, чисел и т.д #14
Kuzia domovenok, открыл .exe файл в блокноте (Programmers notepad), там символы. Попробовал поменять кодировку, но ничего не изменилось, только программа перестала запускаться
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 20:04     Сравнение строк, чисел и т.д #15
Цитата Сообщение от dima55501 Посмотреть сообщение
Kuzia domovenok, открыл .exe файл в блокноте (Programmers notepad), там символы. Попробовал поменять кодировку, но ничего не изменилось, только программа перестала запускаться
ну так кто ж тебе даст просто так поменять? Как минимум нужно сохранить длину строки. А по-хорошему, смотреть на это дело в дизассемблере и соображать.
dima55501
 Аватар для dima55501
29 / 33 / 6
Регистрация: 14.07.2013
Сообщений: 146
02.08.2013, 20:05     Сравнение строк, чисел и т.д #16
Kuzia domovenok, в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
02.08.2013, 20:15     Сравнение строк, чисел и т.д #17
Цитата Сообщение от dima55501 Посмотреть сообщение
в общем я видимо ошибался, когда думал, что пароль там будет написан большими буквами посередине
Однако, он будет в открытом виде, так что если блокнот не подумал, что этот файл в Unicode, то надо просто внимательнее посмотреть.

Добавлено через 1 минуту
Да, строчку эту надо бы где-нибудь в проге использовать, а иначе её после оптимизации может не остаться уже.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 20:56     Сравнение строк, чисел и т.д #18
dima55501, а ты попробуй подобрать здесь пароль
Вложения
Тип файла: rar crack_my_password.rar (4.7 Кб, 11 просмотров)
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
02.08.2013, 21:13  [ТС]     Сравнение строк, чисел и т.д #19
Дадите исходник подберём

Добавлено через 5 минут
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
забыл. Новичок не догадается вставить
Не обижайте так, ведь новичок это не означает что пол часа назад начал С++ изучать

Добавлено через 7 минут
Решил так, чтоб особо не заморачиваться

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
// Проверка строк (пароля).cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
 
void valid () {
    cout << "Valid password! =)" << endl;
}
 
int main() {
    string s1 = "qwerty", s2;
    cout << "Enter password: ";
    cin >> s2;
    if (s2 == s1) {
    valid();
    }
    else {
    cout << "Error!No valid password!" << endl;
    }
    getch();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 21:23     Сравнение строк, чисел и т.д
Еще ссылки по теме:

Сравнение строк C++
C++ сравнение строк
Сравнение строк C++

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
02.08.2013, 21:23     Сравнение строк, чисел и т.д #20
Цитата Сообщение от Даниил Посмотреть сообщение
Дадите исходник подберём
вполне реально без исходника обойтись.
Цитата Сообщение от Даниил Посмотреть сообщение
Решил так, чтоб особо не заморачиваться
Заморачиваться не стал, но и проблема защиты от взлома не исчезла.
Yandex
Объявления
02.08.2013, 21:23     Сравнение строк, чисел и т.д
Ответ Создать тему
Опции темы

Текущее время: 20:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru