[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: генератор паролей
xotabb
Всем снова привет,
есть переменная
Скрытый текст
$passw="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

скажите как сделать чтобы пароль генерировался из этих символов,
минимум в пароле 4 символа, а максимум 9.
подскажите, может их нужно в массив занести?



Спустя 2 минуты, 44 секунды (26.06.2010 - 19:26) ИНСИ написал(а):
xotabb посмотри функцию:
uniqid();
думаю это то, что тебе надо.

Спустя 5 минут, 55 секунд (26.06.2010 - 19:32) twin написал(а):
Смысл?

Спустя 10 минут, 41 секунда (26.06.2010 - 19:42) xotabb написал(а):
мне нужна генерация технического пароля
$token = uniqid("123456");
echo"$token";

не работает,
хотя по функции я нашёл это, где о ней можно подробно почитать?

Спустя 16 минут, 20 секунд (26.06.2010 - 19:59) twin написал(а):
В этой функции никакого смысла для данной задачи нет.
Если нужна случайная строка, то вот тут глянь.

Спустя 34 минуты, 20 секунд (26.06.2010 - 20:33) xotabb написал(а):
спасибо

Спустя 36 минут, 59 секунд (26.06.2010 - 21:10) ИНСИ написал(а):
xotabb сделай вот так:
$newText = uniqid();
echo $newText;


Спустя 1 минута, 39 секунд (26.06.2010 - 21:12) twin написал(а):
Сам то делал?

Спустя 1 минута, 49 секунд (26.06.2010 - 21:13) ИНСИ написал(а):
twin ты ко мне это пишешь?
Цитата
Сам то делал?


Спустя 2 минуты, 19 секунд (26.06.2010 - 21:16) twin написал(а):
Ну конечно. Ты, прежде чем советовать, попробуй сам. А за одно внимательно почитай, что это за функция.

Спустя 5 минут, 58 секунд (26.06.2010 - 21:22) ИНСИ написал(а):
twin извини пожалуйста, но ты меня достал уже.
Цитата
Ты, прежде чем советовать, попробуй сам

Я пробовал сам. Получился результат: 4c26448bba47a. При обновлении страницы, код меняется.
Цитата
А за одно внимательно почитай, что это за функция.

я нихрена ничего про эту функцию не говорил. Для чего ты это написал? просто чтобы показать какой ты у нас тут умный?
Цитата
думаю это то, что тебе надо.

я не утверждал что это решение его задачи!

Спустя 21 минута, 38 секунд (26.06.2010 - 21:43) twin написал(а):
Иш ты... Достал я его.
Ты вот как обычно много на себя берешь. Советуешь что попало, еще и петушишься.
Если я поправил твой откровенный ляп (не в первый раз уже) - изучи внимательно предмет, а то опять будешь выглядеть бледно.

Объясняю, раз сам не можешь проанализировать ситуацию.

Человеку нужен генератор паролей. А точнее - генератор случайной строки, которую было бы трудно подобрать или спрогнозировать. Так вот. Функция uniqid() служит для генерации уникального идентификатора, а не пароля. Для пароля она не подходит потому что
1. основана на метке времени, а значит зная примерное время получения пароля, совсем нетрудно сгенерировать диапазон значений
2. генерируется по принципу md5, а значит может состоять только из символов 0-9a-f, то есть всего из 16 символов, что тоже крайне сильно облегчает подбор
3. префикс строки (первые символы) зависит от хоста и не меняется, что еще больше сокращает диапазон.
4. ну и по условиям нужна строка от 4 до 9 символов, а функция возвращает 13. Если обрезать - будет еще хуже.

Пароль, сгенерированный на основе этой функции крайне ненадежен и вычисляется методом подбора за вполне адекватное время.

Так что генерировать пароль на её основе - тоже самое, что использовать вместо замка веревку. Вроде бы узел, но развязать - раз плюнуть.

Будешь дальше выделываться?

Спустя 38 минут, 37 секунд (26.06.2010 - 22:22) xotabb написал(а):
twin
может дашь пример простого кода по моему условию.
тогда все всё будет ясно.
если конечно не получилась ситуация что не при делах ещё только Я.

Спустя 6 минут, 5 секунд (26.06.2010 - 22:28) twin написал(а):
Самый простой
    function generatePass($len = 5)
{
$a = range(0, 9);
$b = range('a','z');
$c = range('A', 'Z');
$a = array_merge($a, $b);
$a = array_merge($a, $c);
shuffle($a);
$a = array_slice($a, 0, $len);
return implode('', $a);
}

echo generatePass(rand(4,9));
но это псевдослучайная строка. Если нужно посерьёзнее, я давал ссылку.

Спустя 16 минут, 17 секунд (26.06.2010 - 22:44) xotabb написал(а):
twin
я тот код видел в гуугле...
хорошо, пойду твою ссылку колупать

Спустя 14 минут, 39 секунд (26.06.2010 - 22:59) twin написал(а):
    function generatePass($len = 5)
{
$a = range(0, 9);
$b = range('a','z');
$c = range('A', 'Z');
$arr = array_merge($a, $b);
$arr = array_merge($arr, $c);
$arr = array_merge($arr, $arr);
$rand = microtime(true);
$key = '';

for($i = 0; $i < $len; $i++)
{
shuffle($arr);
$key.= $arr[(round(($rand * 1000 - floor($rand * 1000)),2) * 100 )];
$rand = microtime(true);
}

return $key;
}

echo generatePass(rand(4, 9));

Держи. Супернадежный генератор.

Спустя 52 минуты, 20 секунд (26.06.2010 - 23:51) xotabb написал(а):
twin
спасибо,
а как сделать повтор функции до определённого момента?

Спустя 2 часа, 32 минуты, 56 секунд (27.06.2010 - 02:24) qpayct написал(а):
не могу молчать! ставьте стол, чтоб welbox2-у кукарекать было из под чего laugh.gif

Спустя 11 минут, 3 секунды (27.06.2010 - 02:35) Winston написал(а):
Цитата (qpayct @ 27.06.2010 - 01:24)
не могу молчать! ставьте стол, чтоб welbox2-у кукарекать было из под чего

Спустя 7 часов, 8 минут, 9 секунд (27.06.2010 - 09:44) twin написал(а):
Не ругайтесь. Человек искренне хочет помочь, это похвально. А не ошибается тот, кто ничего не делает.
Молодой, горячий просто. Жизнь пообтешет.

xotabb
Цитата
а как сделать повтор функции до определённого момента?

Не понял ничего

Спустя 2 часа, 11 минут, 29 секунд (27.06.2010 - 11:55) xotabb написал(а):
народ, так как сделать повтор функции?

Спустя 5 минут, 44 секунды (27.06.2010 - 12:01) ИНСИ написал(а):
qpayct PHPprogramer вообще молчите!!! Этот разговор к вам не относится. Сами бы научились нормально программировать. Святоши блин...

twin я во многом с тобой согласен. Многое еще не знаю, и если я пишу в какой нибудь теме, где я не уверен, я просто предлагаю на рассмотрение что-то. В данном случае, я просто предложил рассмотреть эту функцию.

Ты сам начал "петушиться". (не надо прибегать к оскорблениям!!!). Ты мог просто объяснить почему не подходит эта функция. Ты это сделал, после того, как мы начали уже вести не очень приятный диалог.

Я смотрю. Ты крутой программист, уже в возрасте, а значит у тебя много опыта. Но кажется одному ты не научился. Быть вежливее и адекватнее...

Спустя 58 минут, 34 секунды (27.06.2010 - 12:59) xotabb написал(а):
Я понимаю что вы мне тут помагаете, но всё же, не нужно тут из себя строить абы что. это не разборки а детский лепет(вам до меня далеко так сказать) но это тут не при чём.
qpayct
Вам нужно проявлять больше терпения, и научитесь отвечать за свои слова, даже если их не так поняли.
welbox2
вы конечно всё почти правильно пишите, но уж решите что вы хотите , в одном посте вы явно хотите выяснить отношения, а в другом "лишбы они успокоились, у меня дел много"
twin
прав, мне года 2 назад также написал один администратор хороших сайтов, прошло время и всё стало как он и говорил.
так будет со всеми, просто это не нужно людям говорить, они в таком случае будут этому сопротивляться!
а так всё нормально если не считать что на второй вопрос из почти 10 сообщений не дал ответа ни кто.
и ещё twin- в движке снизу поправь
ultidomen edition © 2003-2009 на 2010, или вставь туда дату типо (-Y);

Спустя 17 минут, 59 секунд (27.06.2010 - 13:17) twin написал(а):
С вашего позволения лишний треп я удалил.
А тебе welbox2 еще раз посоветую. Прежде чем давать ответ, особе6нно после того, как тебя поправили, изучи внимательно предмет. Или спроси, если чего не понял. А не лезь со своими советами напрополую и поперек.

По поводу вежливости... Почитай еще раз топик. Кто начал то? Кто кого достал?
Цитата
Ты мог просто объяснить почему не подходит эта функция.

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

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

xotabb
какой повтор, объясни толком.

Спустя 4 минуты, 25 секунд (27.06.2010 - 13:22) xotabb написал(а):
twin
Цитата
xotabb
какой повтор, объясни толком.

где я про повтор написал?

Спустя 2 минуты, 15 секунд (27.06.2010 - 13:24) twin написал(а):
Цитата
xotabb
народ, так как сделать повтор функции?

Спустя 8 минут, 21 секунда (27.06.2010 - 13:32) xotabb написал(а):
как сделать что бы функция (генерация пороля выполнялась до определённого момента,)
мне это нужно для присвоения данного (тех) пароля для всех пользователей и ещё одной пока не дописанной вещи

Спустя 1 минута, 40 секунд (27.06.2010 - 13:34) twin написал(а):
Ничего не понял. Какого момента? Толком объясни.

Спустя 8 минут, 21 секунда (27.06.2010 - 13:42) xotabb написал(а):
мене нежно что бы пароль генерировался до тех пор пока
if($pass == $moment) { echo"yes"; } break;
типо этого
подпись не сильно большая? может сменить?

Спустя 3 минуты, 12 секунд (27.06.2010 - 13:46) twin написал(а):
Запутал окончательно. Описывай функционал своими словами. Что и когда должно произойти.

Спустя 3 минуты, 10 секунд (27.06.2010 - 13:49) xotabb написал(а):
вот функция generatePass(rand(4, 9));
и мне нужно что бы она генерировала мне пароль до тех пор пока он не будет равен например 5ае489н,
а дальше я под своё переделаю...

Спустя 1 час, 23 минуты, 25 секунд (27.06.2010 - 15:12) waldicom написал(а):
Разводите тут скрипткиддисов, кулхацкеров и мегаподбиральщиковпаролей.
А они про циклы то ни разу и не слышали.

xotabb, ты или убирай свою подпись, которая высотой больше, чем твои посты, или я тебе помогу.

Спустя 12 минут, 30 секунд (27.06.2010 - 15:25) xotabb написал(а):
waldicom
я конечно не понел причём тут кулцхацкеры, подборщики и подобно, но насчёт подписи я уже спрашивал.
если быть точным, то мне нужно чтобы данный пароль добавился ко всем пользователям в базе и потом прекратил работу.

Спустя 5 минут, 8 секунд (27.06.2010 - 15:30) twin написал(а):
Если нужно добавить пароль каждому, то причем здесь
Цитата
и мне нужно что бы она генерировала мне пароль до тех пор пока он не будет равен например 5ае489н
?

Просто нужно сгенерировать каждому по очереди.

А подобного рода перебор паролей называется "брутфорс", и это явно не на наш форум.

Спустя 5 минут, 44 секунды (27.06.2010 - 15:35) xotabb написал(а):
просто я не мог правильно обьяснить, а из това типо переборщака, я бы вырезал сравнение, и добавил добавление

Спустя 12 минут, 5 секунд (27.06.2010 - 15:48) twin написал(а):
Не юли. Чего ты с чем сравнивать то хотел?
Дураков из нас не делай. Если нужно добавить каждому, то их и перебирай. Причем тут сравнение?

Да и вообще, ты представляешь себе хоть немного, сколько тысяч лет тебе понадобится, чтобы подобрать такой пароль
Цитата
YcB2Vd9ef

?

Спустя 5 часов, 29 минут, 55 секунд (27.06.2010 - 21:17) qpayct написал(а):
учитесь, пока я жив
for($i=0; $i<6; $i++)
{
$pass.= symbolGenerator(rand(1, 3));
}

echo $pass;

function symbolGenerator($n)
{
switch($n)
{
case 1:
$num = rand(48, 57); // numbers
break;
case 2:
$num = rand(65, 90); // upper
break;
case 3:
$num = rand(97, 122); // lower
break;
}
return chr($num);
}

Спустя 1 час, 44 минуты, 36 секунд (27.06.2010 - 23:02) twin написал(а):
Да, действительно есть чему поучиться. smile.gif
Перед вами классический пример того, как можно в погоне за лаконичностью кода написать совершенно неудобный и неоптимальный скрипт.

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

2. Функция основана на псевдослучайных последовательностях, которые генерируются в цикле. А как известно все, что делается нештатными средствами - медленнее. Вот и тут эта реализация проигрывает предложенному мной первому варианту почти в 10 раз по скорости при одинаковом результате.

3. Да и лаконичным то его назвать сложно - по количеству строк он тоже проигрывает.

Так что действительно - век живи, век учись. smile.gif

Спустя 1 час, 9 минут, 45 секунд (28.06.2010 - 00:12) qpayct написал(а):
итак, давайте посмотрим кто есть ху smile.gif
г-н Твин утверждает:
Цитата (twin @ 27.06.2010 - 22:02)
эта реализация проигрывает предложенному мной первому варианту почти в 10 раз по скорости при одинаковом результате.
, а вот по факту:
вариант г-на Твин-а
результаты времени
Цитата
0.000165
0.000451
0.000180
0.000164
0.000400
0.000162
0.000347
0.000166
0.000481
0.000173
------------
0,000269 (в среднем)


мой вариант
результаты
Цитата
0.000133
0.000424
0.000151
0.000127
0.000128
0.000036
0.000128
0.000123
0.000146
0.000124
------------
0,000152 (в среднем)
выходит мой псевдо-лаконичный код или как там вы удосужились его обозвать работает практически вдважды быстрее кода великого гуру phpforum-a

Твин,
я требую обьяснений. надеюсь вы сможете прояснить мне ситуацию.

Спустя 9 часов, 44 минуты, 46 секунд (28.06.2010 - 09:57) twin написал(а):
Ты какой мерял вариант? Первый или второй?
Первый вариант, основанный на псевдослучайностях (как у тебя) вот (он был чуть раньше):

    function generatePass($len = 5)
{
$a = range(0, 9);
$b = range('a','z');
$c = range('A', 'Z');
$a = array_merge($a, $b);
$a = array_merge($a, $c);
shuffle($a);
$a = array_slice($a, 0, $len);
return implode('', $a);
}

echo generatePass(rand(4,9));


Измерь его. А последний вариант основан на более случайных параметрах. Это время выполнения операции в цикле. Оно зависит от разных, совершенно непредсказуемых условий - температуры процессора, его текущей загруженности, напряжения питания, магнитных полей и так далее.
Для генератора пароля это конечно не актуально, но для генерации случайной строки (для той же капчи к примеру) он более надежен, хотя и немного медленнее.

Спустя 45 минут, 42 секунды (28.06.2010 - 10:42) qpayct написал(а):
я проверил оба. Естесственно привел данные первого так как они оказались лучше. Всетки считаю свой код может и не лучше, но не менее интересным. Вот потому лучше проверять прежде чем говорить.

Спустя 13 минут, 1 секунда (28.06.2010 - 10:55) twin написал(а):
Тогда давай код, каким образом мерял. Закрадываются смутные сомнения в верности теста. Вот мои измерения:
Мой:
0.000643968582153
0.00061297416687
0.000331163406372
0.000614166259766
0.000612020492554



Твой:
0.00185990333557
0.0019690990448
0.00097393989563
0.00194096565247
0.00196409225464

Даже среднее не нужно вычислять, чтобы увидеть разницу.

Спустя 14 минут, 24 секунды (28.06.2010 - 11:10) qpayct написал(а):
Я делаю так:
$start = microtime();
Сюды код.
$end = microtime();
$timer = $end - $start;
Echo $timer;

Спустя 2 минуты, 18 секунд (28.06.2010 - 11:12) xotabb написал(а):
twin
я давно сделал подборщика своего, и нашёл на php много рабочих.
я имел в виду,
функция фыдает пасс $tt=pass($pas);
mysql_query("insert into `user` set `texpass`=$tt");
фот что мне нужно в базе более 1000 пользователей,
вы везде видите угрозу

Спустя 13 минут, 32 секунды (28.06.2010 - 11:26) xotabb написал(а):
это к примеру корявый код

Спустя 3 минуты, 48 секунд (28.06.2010 - 11:29) twin написал(а):
qpayct
Ну вопервых
$start = microtime(true);

А во вторых, какой код? Я сильно подозреваю, что твой код генерит пароль из 6-ти символов, а мой из 9-ти.

xotabb
Да какая же это угроза... Это просто попытка вырезать гланды с прямо противоположной стороны...

Я так и не понял, зачем нужно что то подбирать? Если пароли известны и записаны в базе - их просто нужно достать. А если они новые, то зачем чего то подбирать?

Спустя 5 минут, 37 секунд (28.06.2010 - 11:35) xotabb написал(а):
да не подбирать
вы би дали код
if($pass == "fgbgdsf") { } else {}
а я бы написал
mysql_query раньше я не мог понять как это сделать, а теперь понимаю

Спустя 32 минуты, 49 секунд (28.06.2010 - 12:08) qpayct написал(а):
Лан, приду домой проверю

Спустя 1 день, 10 часов, 13 минут, 36 секунд (29.06.2010 - 22:21) qpayct написал(а):
проверил. одно и тоже. просто цыфры длиннее стали, но разница таже. короче говоря либо тут кто-то нагло врёт либо дело в железе.

Спустя 2 минуты, 27 секунд (29.06.2010 - 22:24) twin написал(а):
В цикле у тебя стоит 6 или 9?

Спустя 7 минут, 34 секунды (29.06.2010 - 22:31) qpayct написал(а):
я могу конечно в условия своего цикла добавить rand(4,9) как у вас но принципиально дело ведь не в этом, а в том что мой код не так уж плох, как вы его озвучили.... вот в чём дело

но раз вы настаиваете, то специально для тех кто не верит(для неверных wink.gif) я провёл повторные проверки не жалея драгоценного времени и сил и вот они результаты:

код Twin-a
$start = microtime(true);

function generatePass($len = 5)
{
$a = range(0, 9);
$b = range('a','z');
$c = range('A', 'Z');
$a = array_merge($a, $b);
$a = array_merge($a, $c);
shuffle($a);
$a = array_slice($a, 0, $len);
return implode('', $a);
}

echo generatePass(rand(4,9));

$end = microtime(true);
$now = $end - $start;
echo "<br /><br />". $now ."<br /><br />";


замерки
Цитата
0.000141859054565
0.000148057937622
0.000355005264282
0.000159025192261
0.000149965286255


мой вариант

$start = microtime(true);

for($i=0; $i<rand(4,9); $i++)
{
$pass.= symbolGenerator(rand(1, 3));
}

echo $pass;
$end = microtime(true);
$now = $end - $start;
echo "<br /><br />". $now ."<br /><br />";

function symbolGenerator($n)
{
switch($n)
{
case 1:
$num = rand(48, 57); // numbers
break;
case 2:
$num = rand(65, 90); // upper
break;
case 3:
$num = rand(97, 122); // lower
break;
}
return chr($num);
}


и замерки
Цитата
0.000128030776978
0.000117063522339
0.000109910964966
0.000110149383545
0.000123023986816
прошу. всё как вы требовали.

Спустя 6 минут, 42 секунды (29.06.2010 - 22:38) twin написал(а):
Нет, не в rand(). Вот тут:
for($i=0; $i<6; $i++)

шесть или девять?

Спустя 6 минут, 41 секунда (29.06.2010 - 22:45) qpayct написал(а):
чёто на форуме разметка кода глючит... сразу мне понятно стало откуда эти идеи о написании ббдекодера появились.... laugh.gif

Спустя 3 минуты, 53 секунды (29.06.2010 - 22:49) twin написал(а):
Вот прям как есть запусти
$start = microtime(true);

function generatePass($len = 5)
{
$a = range(0, 9);
$b = range('a','z');
$c = range('A', 'Z');
$a = array_merge($a, $b);
$a = array_merge($a, $c);
shuffle($a);
$a = array_slice($a, 0, $len);
return implode('', $a);
}

echo generatePass(9);

$end = microtime(true);
$now = $end - $start;
echo "<br /><br />". $now ."<br /><br />";


$start = microtime(true);

for($i=0; $i < 9; $i++)
{
$pass.= symbolGenerator(rand(1, 3));
}

echo $pass;
$end = microtime(true);
$now = $end - $start;
echo "<br /><br />". $now ."<br /><br />";

function symbolGenerator($n)
{
switch($n)
{
case 1:
$num = rand(48, 57); // numbers
break;
case 2:
$num = rand(65, 90); // upper
break;
case 3:
$num = rand(97, 122); // lower
break;
}
return chr($num);
}

Спустя 10 минут, 57 секунд (29.06.2010 - 23:00) qpayct написал(а):
разговор был са-авсем о другом rolleyes.gif
извините, не прокатит smile.gif

но смысл мне понятен. возьму на вооружение

Спустя 4 минуты, 9 секунд (29.06.2010 - 23:04) twin написал(а):
Не понял, что не прокатит...
И смысл вполне определенный. Цикл - штука не удобная и медленная в данном случае.
Так что все ровненько. smile.gif

Спустя 4 минуты, 46 секунд (29.06.2010 - 23:09) qpayct написал(а):
ага! ровненько.... и 8 вызовов функций + 7 присваиваний тоже лучше цикла? не думаю.
да и опять повторяю, это не главное, а главное то, что разницы в 10 раз там быть не может и нет. так что вот эти ваши попытки не прокатят. ну да ладно, я для себя всё понял, а большего мне и не надо

Спустя 8 минут, 35 секунд (29.06.2010 - 23:17) twin написал(а):
))) Так приятнее?
    function generatePass($len = 5)
{
$a = array_merge(range(0, 9), range('a','z'));
$a = array_merge($a, range('A', 'Z'));
shuffle($a);
$a = array_slice($a, 0, $len);
return implode('', $a);
}

Спустя 8 минут, 29 секунд (29.06.2010 - 23:26) qpayct написал(а):
да. спасибо. спокойной ночи


_____________
if (isset($beer)) drink($beer) ;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.