Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
string pswdGen(int quantity) {
srand(time(0));
char chars[] = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890@\#\$\%\&\-\+\!\/\_"; // Символы, из которых будет состоять пароль
string password;
for(int i = 0; i < quantity; i++) {
password += chars[rand() % (sizeof(chars)/sizeof(*chars))]; // Добавить рандомный символ из списка в пароль
}
return password;
}
int main() {
int charNo;
cout << "How many characters do you want in the password?" << endl;
cin >> charNo;
cout << "Your new password is: " << pswdGen(charNo) << endl;
return 0;
}
Вот была такая параша в криптолокерах, где использовали ГПСЧ и seed инициализировали системным временем, просили выкуп в биткоинах. Эту парашу еще потом смогли бесплатно без смс расшифровать на основе времени создания зашифрованных файлов.
осеменять генератор случайных чисел текущим временем это пидерство высшей категории.
Криптолокеры не имеют ключа для расшифровки: они просто затирают данные рендомной хуйней, а после получения оплаты высылают случайную последстовательность символов.
Не удалось расшифровать файлы? Ну, можешь обратиться в полицию
Да и на случай, если где-нибудь проколешься... И при этом зашифруешь какие-нибудь такие файлы, что высылать последовательность придется, пока нагревается паяльник.
Вирус активизировался в январе 2008 года и поразил системы семи органов исполнительной власти области, городской Думы Благовещенска, избирательной комиссии области, Благовещенского городского суда, УВД по Амурской области и других учреждений.
>>огда же и появилась легенда, что российский программист решил отомстить отвергнувшей его девушке,
>>ОДИТЬ РЯДОМ И СМЕЯТЬСЯ НАД ТЕМ КАК ТЫ, СУКА, ИЩЕШЬ ВИНОВНИКА!! СОСИ ХУЙ, ЛИЖИ ПИЗДУ!! ХАХАХАХ \Penetrator\
Х.з., инфе в экзешнике тоже слепо верить не стоит. Может быть у чела дата была сбитая или он специально её перевёл. Или написал и джва четыре года ждал подходящего случая.
1) Проблемы использования rand() я описывал в предыдущем генераторе паролей
2) Скорее всего, оператор += применительно к строке будет неэффективным, особенно учитывая то что размер строки заранее известен.
Позволю себе привести то как я бы реализовал данный тобой алгоритм.
Говно. Правда не столько в твоём коде, сколько в спеке и реализациях.
std::random_device may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case each std::random_device object may generate the same number sequence.
A notable implementation where std::random_device is deterministic is MinGW (bug 338).
З.Ы. Хотя не, вообще говнище полное даже если std::random_device не поломан. Ты же четырьмя байтами инициализируешь MT. Из-за этого всего 4ккк разных паролей получится...
device() возвращает unsigned int. Т.е. ты инициализируешь MT одной из 4ккк комбинаций. Столько же (или чуть меньше из-за коллизий) разных паролей ты и получишь на выходе независимо от их длины. А 4 миллиарда -- это ни о чём, брутится за день. Не лучше rand()'а получается.
Но с точки зрения криптографии -- тоже фигня, конечно. MT -- не самая подходящая функция для KDF. К random_device после той фразы в спеке и факапа в mingw у меня вообще никакого доверия нет.
В общем, если бы мне надо было генерить пароли, я бы взял за основую нормальную криптографическую либу. Ну а поверх её генератора уже можно натянуть uniform_int_distribution.
Даже если предположить, что в качестве random_device нам достался качественный TRNG, то получается, что мы из него выкачали целых 2.5 килобайта. Не всем TRNG такие большие запросы нравятся, тот же /dev/random может подвиснуть пока будет копить энтропию... А реально нужно было от силы 16 байтиков.
Если программа запускается на ноутбуке или на планшете/смартфоне, то можно рассчитывать на наличие микрофона, с которого можно снять недетерминированный сигнал.
Ещё более лучшим источником, так сказать станет незакрывающаяся жестяная крышка от стеклянной бутылки со всё тем же "Pepsi", затолканная в твой анал (да и "bormand"-а тоже).
На планшете/смартфоне рандом можно из гироскопа и акселерометра брать, при этом можно попросить владельца потрясти девайс.
Кажется в каком-то старом приложении на Java для взаимодействия с банком (работа с расчетным счетом там, платежи принимать-отправлять) было еще такое окошечко сраное, в котором надо было мышкой порисовать какой-то хуйни, чтоб рандом собрался
Вот есть у тебя 200 шаров и 3 коробки. Сможешь ли ты равномерно раскидать эти шары по коробкам? Очевидно, что нет.
Чтобы не потерять равномерность распределения придётся часть вариантов выкинуть (рероллить на них рандом пока не выпадет что-то хорошее).
Например, если при преобразованнии [0; 200) в [0; 3) у тебя выпадает 198 или 199, то ты тупо рероллишь новое число из [0; 200) пока не выпадет что-то поменьше.
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#define next ;
#define zero 0
#define one 1
#define two 2
#define three 3
#define four 4
#define five 5
#define six 6
#define seven 7
#define eight 8
#define nine 9
#define dot .
#define begin {
#define end }
#define open (
#define close )
#define sqopen [
#define sqclose ]
#define less <=
#define xless <
#define greater >=
#define xgreater >
#define isnt !=
#define isequal ==
#define mustbe =
#define write cout
#define plus +
#define minus -
#define multi *
#define divby /
#define incr +=
#define decr -=
using namespace std next
string pswdGen open int quantity close begin
srand open time open 0 close close next
char chars sqopen sqclose mustbe "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890@\#\$\%\&\-\+\!\/\_" next
string password next
for open int i = zero next i xless quantity next i++ close begin
password incr chars sqopen rand open close % open sizeof open chars close divby sizeof open *chars close close sqclose next
end
return password next
end
int main open close begin
int charNo next
write << "How many characters do you want in the password?" << endl next
cin >> charNo next
write << "Your new password is: " << pswdGen open charNo close << endl next
return zero next
end
И да,
password incr chars sqopen rand open close % open sizeof open chars close divby sizeof open *chars close close sqclose next
Криптолокеры не имеют ключа для расшифровки: они просто затирают данные рендомной хуйней, а после получения оплаты высылают случайную последстовательность символов.
Не удалось расшифровать файлы? Ну, можешь обратиться в полицию
Вирус активизировался в январе 2008 года и поразил системы семи органов исполнительной власти области, городской Думы Благовещенска, избирательной комиссии области, Благовещенского городского суда, УВД по Амурской области и других учреждений.
Хотя тут чувак что-то совсем легко отделался...
>>ОДИТЬ РЯДОМ И СМЕЯТЬСЯ НАД ТЕМ КАК ТЫ, СУКА, ИЩЕШЬ ВИНОВНИКА!! СОСИ ХУЙ, ЛИЖИ ПИЗДУ!! ХАХАХАХ \Penetrator\
ох, лол
>> создан 04.08.2003 9:00:00 AM
Ясно. Статья на основе слухов.
На вирустотале в инфе из хедеров написано: Compilation timestamp 2007-09-16 12:22:27.
Я -- вирус, и чтобы я работал, пожалуйста установите мой рантайм.
Хотя мы тут уже обсуждали что кусок вбрантайма есть на винде
2) Скорее всего, оператор += применительно к строке будет неэффективным, особенно учитывая то что размер строки заранее известен.
Позволю себе привести то как я бы реализовал данный тобой алгоритм.
std::random_device may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case each std::random_device object may generate the same number sequence.
A notable implementation where std::random_device is deterministic is MinGW (bug 338).
1.https://codereview.stackexchange.com/questions/109260/seed-stdmt19937-from-stdrandom-device
Но с точки зрения криптографии -- тоже фигня, конечно. MT -- не самая подходящая функция для KDF. К random_device после той фразы в спеке и факапа в mingw у меня вообще никакого доверия нет.
В общем, если бы мне надо было генерить пароли, я бы взял за основую нормальную криптографическую либу. Ну а поверх её генератора уже можно натянуть uniform_int_distribution.
Рано или поздно породит chars.length()
З.Ы. Версия с srand(&seed) поинтересней выглядит с учётом ASLR.
https://xkcd.com/221/
Факт.
Отправлено автоматически. Ругаться бесполезно.
Кажется в каком-то старом приложении на Java для взаимодействия с банком (работа с расчетным счетом там, платежи принимать-отправлять) было еще такое окошечко сраное, в котором надо было мышкой порисовать какой-то хуйни, чтоб рандом собрался
А, ты про подпись. Тогда в принципе да
Вот есть у тебя 200 шаров и 3 коробки. Сможешь ли ты равномерно раскидать эти шары по коробкам? Очевидно, что нет.
Чтобы не потерять равномерность распределения придётся часть вариантов выкинуть (рероллить на них рандом пока не выпадет что-то хорошее).
Например, если при преобразованнии [0; 200) в [0; 3) у тебя выпадает 198 или 199, то ты тупо рероллишь новое число из [0; 200) пока не выпадет что-то поменьше.
Это то же самое, если бы в программе на C++ было бы:
И да,
. Лол.
Не хватает "#define point ." для десятичной точки.