- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
<?php
define(STATIC_SALT, "herz_salt");
function generateRandChar()
{
$chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789';
$numChars = strlen($chars);
$string = '';
for ($i = 0; $i < rand(1, 7); $i++)
{
$string .= substr($chars, rand(1, $numChars) - 1, 1);
}
return $string;
}
$time = microtime(true) / 10000;
$str = $time - floor($time);
$str = (string)$str;
$str = preg_replace('/0./', '', $str);
$deleteNum = strlen($str);
if($deleteNum <= 5)
{
$str = substr($str, rand(0, 4));
}
elseif($deleteNum > 5 && $deleteNum <= 10)
{
$str = substr($str, rand(5, 9));
}
else $str = substr($str, rand(7, 9));
if(strlen($str) == 0)
{
$str = rand(0, 15000);
}
sleep(5);
$str = sha1(md5($str . STATIC_SALT . microtime(true))) . generateRandChar();
echo $str;
?>
govnomonad 17.06.2012 05:07 # +2
а я уж было подумал, что хацкель
Lure Of Chaos 17.06.2012 05:42 # +3
я многое в коде прощу, но вот это зря, оч зря
bormand 17.06.2012 07:19 # +3
Это не паранойя, а непонимание основ криптографии.
> sleep(5)
Автору нет прощения.
Я вот не пойму, что пытался выразить автор сего творения. Генерацию случайного идентификатора? Тогда зачем все это. Все эти танцы с обрезаниями строк и хешем на хеше только делают результат МЕНЕЕ случайным...
bormand 17.06.2012 07:27 # 0
govnomonad 17.06.2012 08:54 # +3
это просто имитация крутого алгоритма, который работает аж целых пять секунд
ЕМНИП, rand() генерирует последовательность {x_i = a * x_{i-1} + b \bmod m}, что не очень секурно
А вообще что это? Попытка хэширования с рандомной солью и защитой от терморектального криптоанализа?
bormand 17.06.2012 09:15 # 0
Вот лучше бы он sha погонял раз на 100 :) Все веселее.
> rand() генерирует последовательность {x_i = a * x_{i-1} + b \bmod m}
Угу. Поэтому что один rand(), что 100500 - криптостойкость от этого не повысится.
> Попытка хэширования с рандомной солью
Ну тут нет входной строки. Так что это просто рандомный идентификатор. Видимо для генерации ссылок на загрузку файла...
eth0 17.06.2012 09:52 # +4
bormand 17.06.2012 10:50 # 0
Путь настоящего похапшника - экономить на спикавычках (одинарные кавычки работают на 10 наносекунд быстрее!), не использовать проверенных алгоритмов (понаписали всякой непонятной херни, чем разбираться - лучше напишу свой!), не читать манов (зачем? все и так понятно!). Вот так :[
P.S. Archont12, поясните пожалуйста, для чего автор хотел применить (или, возможно, применил) данный код?
Archont12 17.06.2012 11:49 # 0
Решил похвастаться алгоритмом. )))
Lure Of Chaos 17.06.2012 10:53 # +3
bormand 17.06.2012 10:55 # +3
Archont12 17.06.2012 16:54 # −2
rat4 17.06.2012 18:31 # +3
roman-kashitsyn 17.06.2012 12:10 # +1
Archont12 17.06.2012 13:43 # +1
wvxvw 18.06.2012 02:20 # −1
Примерно похожим (но не таким, конечно) способом работает генерация паролей во фряхе - вызывает 50 раз кажется MD5 с продуктом от прошлого MD5. Но вообще не важно какой именно алгоритм, главное чтобы не генерировать много похожих хешей, а тут вроде такого не случится.
Тут даже проблема немного в другом, хеширующие функции типа MD5 / SHA работают очень быстро, что делает перебор / подбор ключей проще. Хотя, конечно, просто вызвать надцать раз тот же MD5 / SHA было бы меньше кода :)
bormand 18.06.2012 05:26 # +3
Но это же не авторизация? Здесь нет входной строки... А за генерацию ссылки на файл в течении 5 секунд мне всегда хотелось убивать...
Проблема в том, что код, который над 48й строкой, уменьшает количество возможных хешей. В $str возможны только пятизначные числа - т.е. около 99999 вариантов с хрен-пойми-каким распределением - в то же время обычный rand() на месте $str дал бы гораздо больше вариантов. Поэтому код выше 48й строки не имеет никакого смысла.
bormand 18.06.2012 05:45 # 0
Для засолки и проверки паролей - важно. Попадался велосипедный "хеш", к которому можно было подбирать исходную строку с помощью листа бумаги, ручки и калькулятора ;)
А для генерации ссылки на загрузку видеофайла (http://govnokod.ru/10986#comment142672), конечно, пофиг. Тут бы uniqid() хватило.
wvxvw 18.06.2012 09:19 # +2
По поводу кода выше / ниже: я сначала представил себе, что кроме пароля генерируется "шум", а потом там, где проверяется, он отрезается. Но если это файл то вообще непонятно зачем все это.
wvxvw 18.06.2012 09:33 # 0
[quote]
By default, microtime() returns a string in the form "msec sec", where sec is the current time measured in the number of seconds since the Unix epoch (0:00:00 January 1, 1970 GMT), and msec is the number of microseconds that have elapsed since sec expressed in seconds.[/quote]
Время которое измеряется в числах секунд - кажется причины проблемы с датами начинают становиться более очевидными.
roman-kashitsyn 18.06.2012 09:37 # +2
wvxvw 18.06.2012 09:42 # 0
"и msec - это число микросекунд прошедших с sec измеряные в секундах"
Кого они меряли в секундах? Микросекунды?
roman-kashitsyn 18.06.2012 10:03 # +3
sec expressed in seconds
sec измеряется в секундах с UNIX epoch
msec is the number of microseconds that have elapsed
msec измеряется в миллисекундах, сколько мс прошло с последней секунды.
wvxvw 18.06.2012 14:59 # 0
"И msec - число микросекунд которые прошли с sec выраженн[ые/ых] в секундах."
Это так называемая garden path конструкция, или еще известная как dangling else - т.е. когда обстояетльство в предложении не возможно однозначно связать с одним из членов предложения (не понятно что выражено в секундах: если sec - то зачем повторять то что было только что сказано в этом же предложении, если msec - то как это они микросекунды в секундах меряют?)
Что же касается вашего утверждения о миллисекундах, то стоит отдельно заметить, что про миллисекунды тут речь не шла.
Отдельным пунктом можно добавить, что GMT не является стандартом для времени и его использование не рекомендовано, чтобы избежать разночтений, нужно пользоваться UTC, который в принципе то же самое, что GMT, но однозначно определен.
wvxvw 18.06.2012 15:06 # 0
"И msec - число прошедших (куда?) микросекунд, потому что sec измеряется в секундах".
Последний вариант был бы наиболее предпочтителен для читателя не имееющего привычки читать технические тексты (написаные, как правило людьми страдающими крайней формой дислексии).
TarasChlenodevka 18.06.2012 15:08 # −7
eth0 18.06.2012 18:22 # +1
Функция возвращает строку из компонентов текущего времени от эпоча, равному сумме секунд и микросекунд, где микросекунды принимают значение от нуля до, вероятно, 0.999999990.99999900; именно про это и написано в справке, никаких вторых толкований быть не может. Никаких микросекунд в секундах там нет.
wvxvw 18.06.2012 19:33 # +2
Программистом я был меньшую часть своей жизни, а большую - проработал газетчиком. Так вот, говорю я это к тому, что есть разные ошибки. Есть такие, которые очень любят искать в интернетах - типа тся и ться. Есть такие - которые меньше исчут в интернетах - типа запятых (т.как никто, если по-честному, то не знает где их ставить, даже в родственных языках правила различаются). И есть ошибки в построении предложения, это когда человек плохо понимает язык, на котором разгорваривает и, как следствие, выражается штампами. ВНИМАНИЕ, так разговаривают и пишут подавляющее большинство людей. Напирмер, для англоязычных нормально сказать ATM machine - т.е. когда толком не помнишь что именно стоит за аббревиатурой, то можно сказать глупость.)
Люди, которые осознанно составляют предложения - это люди которых этому научили. Так вот справка написана плохо в том смысле, что не срастаются части предложения во что-то, что можно назвать нормальным английским предложением. Более того, скорее всего писалась каким-нибудь Амиром Авихаем из Кирьят Мордехая или Петах Тиквы, и от желания подражать формализмам английского языка, который на экзамене Амира он сдал на троечку у него получилось то, что получилось.
eth0 18.06.2012 22:46 # +2
bormand 18.06.2012 12:03 # 0
roman-kashitsyn 18.06.2012 12:05 # 0
bormand 18.06.2012 12:15 # 0
Ну спасибо и на том, что вторым вариантом можно получить это время как double...
TarasB 18.06.2012 10:38 # +1
Называется CRC?
bormand 18.06.2012 11:47 # 0
А CRC... ну да, тоже элементарно подбирается.
JavaGovno 17.06.2012 18:34 # −12
TarasChlenodevka 18.06.2012 10:43 # −11