- 1
- 2
- 3
- 4
- 5
- 6
- 7
function advancedMD5($parol) {
$zashita = 50;
for( $i = 0; $i < $zashita; $i++ ) {
$parol = md5($parol);
}
return $parol;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+167
function advancedMD5($parol) {
$zashita = 50;
for( $i = 0; $i < $zashita; $i++ ) {
$parol = md5($parol);
}
return $parol;
}
Неповторимый инновационный алгоритм шифрования паролей...
bormand 16.11.2014 21:42 # +2
Dummy00001 16.11.2014 23:06 # +2
с другой стороны, повторять md5 не имеет большого смысла - хэш уже давно сломан.
bormand 17.11.2014 00:06 # +1
Он взломан только по основному назначению, т.к. научились создавать вполне осмысленные файлы с одинаковыми хешами. А необратимость, емнип, не пострадала.
А для хеширования паролей любая одиночная хеш-функция не имеет большого смысла, т.к. вычисляется слишком быстро. Ради этого и мутили все эти PBKDF2 да bcrypt'ы с scrypt'ами.
bormand 17.11.2014 00:14 # 0
inkanus-gray 17.11.2014 00:17 # +1
bormand 17.11.2014 00:19 # +1
2) Если об этом написано в доке или доступны исходники - хакер будет думать иначе.
Не айс ;)
inkanus-gray 17.11.2014 00:21 # 0
bormand 17.11.2014 00:26 # +2
* т.к. не тупые не будут менять пароль на 123456
inkanus-gray 17.11.2014 00:49 # +3
inkanus-gray 16.11.2014 21:52 # 0
bormand 16.11.2014 21:57 # +3
inkanus-gray 16.11.2014 22:06 # 0
Кстати, в php есть уникальные грабли: если потом контрольную сумму, хранящуюся в string, сравнивать через == вместо ===, то столкновений будет ещё больше!
bormand 16.11.2014 22:09 # 0
http://ideone.com/qTdAO2
inkanus-gray 16.11.2014 22:15 # 0
В PHP 5.4 действительно пофиксили. Но во всё ещё популярном 5.3 всё плохо.
3.14159265 17.11.2014 00:58 # +2
Это ж плавпитух, от него в разных местах страдают многие (и не только скриптовые) языки, например тот же js.
inkanus-gray 17.11.2014 01:18 # +2
3.14159265 17.11.2014 01:29 # +1
Но как можно в динамически типизированном языке быть 100% уверенным что сравниваешь строки???
Никто ж не пишет перед каждой операцией конверсию переменных в нужный тип — тогда весь смысл языка теряется.
Вот жс строку с интом тоже говняет:
'123456789012345678901234567890' == 123456789012345678900000000000 //true
bormand 17.11.2014 01:56 # +1
В перле тоже направление каста однозначно и определяется оператором.
inkanus-gray 17.11.2014 06:31 # +1
1. Отменить ==, а вместо него использовать ===. Всегда.
2. Если нужно сравнивать значения (предположительно) разных типов, то использовать явное преобразование:
intval('0e12') === intval('0e13')
floatval('0e12') === floatval('0e13')
strval('0e12') === strval('0e13')
и так далее.
3. Наконец, и от безумных intval/strval отказаться в пользу более явных. Вместо strval использовать что-то типа sprintf, где можно указать желаемый формат. Вместо intval — функции округления, как предлагает Борманд.
bormand 17.11.2014 06:45 # +6
Может лучше выпилить ===, а == пусть работает как ===? Зачем лишнюю палку то писать?
А вообще, с такими переделками, проще послать пыху нахуй и уйти на какой-нибудь питон.
Vasiliy 17.11.2014 08:58 # 0
bormand 17.11.2014 09:18 # +3
inkanus-gray 16.11.2014 22:39 # +2
Чёрт! В 5.6 та же питушня, и даже в экспериментальном 5.7/7.0 тоже.
bormand 16.11.2014 22:40 # +2
В пёрле все же лучше сделали - отдельные операторы для сравнения чисел и строк. Всегда понятно, что именно произойдет.
inkanus-gray 16.11.2014 22:44 # 0
И в PHP 5.6 то же самое. Поэтому только ===, только хардкор.
bormand 16.11.2014 22:45 # +1
inkanus-gray 16.11.2014 22:47 # 0
bormand 16.11.2014 22:53 # +1
bormand 16.11.2014 23:01 # 0
P.S. Предлагаю запретить "преобразование типов" и вообще выпилить нахуй это бессмысленное и ни о чем не говорящее понятие.
bormand 16.11.2014 23:06 # +2
inkanus-gray 16.11.2014 23:31 # +1
3.14159265 17.11.2014 01:06 # 0
А сравнения?
Сравнивать строковой вид объектов, сравнить с глубоким/неглубоким обходом, просто сравнивать ссылки/указатели, сравнивать плавающие с эпсилоном, без? Сколько таких штук =, ==, ===, ====, ===== надо ввести в язык?
Причем это я молчу о сравнениях с преобразованиями типов.
inkanus-gray 17.11.2014 01:19 # +2
3.14159265 17.11.2014 01:12 # +2
А ну это именно то о чем так долго говорили Тарас и большевики.
Лично я ненавижу сишкоблядские касты, о чем говорил неоднократно.
Во-первых это невозможно быстро нагуглить, если не знаешь слова cast, а когда неявно преобразуется, то и вовсе без прочтения половины доки/стандарта языка не поймешь как же оно работает.
Гораздо понятнее было бы типа аналог конструктора int(2.0), чем (int) 2.0, ну или функция toInt(2.0).
PS> А можно поподробнее про баг в мускуле, помню тред тут проскакивал, но детали совершенно выветрились из моей памяти.
bormand 17.11.2014 02:06 # +1
bormand 17.11.2014 02:10 # 0
Ведь мы думаем об округлении, взятии целой части и.т.п. а не о неведомом приведении флота к инту...
1024-- 17.11.2014 15:25 # +1
Придётся тогда тащить вывод типов в каждый язык с floor и его товарищами или плодить неведомые конструкции.
Хочу я, например, округлить число и сохранить его в переменную.
Сейчас: double x = round(3.5); int x = round(3.5);
С крайне полезными floor/ceil с очевиднейшей семантикой без вывода типов:
double x = round<double>(3.5); int x = round<int>(3.5);
Или придётся оставить касты, но привинтить много новых интересных типов:
P.S. Ещё шаг - и автоматическое доказательство корректности программ придёт к нам.
TarasB 17.11.2014 15:46 # +4
bormand 16.11.2014 21:59 # +2
63%, что существует такое x, что x = f(x).
guest 21.11.2014 17:19 # +2
3.14159265 21.11.2014 18:42 # 0
wvxvw 17.11.2014 09:45 # +2
Une parole encore.
Paroles, paroles, paroles
Écoute-moi.
Paroles, paroles, paroles
Je t'en prie.
Paroles, paroles, paroles
Je te jure.
Paroles, paroles, paroles, paroles, paroles
Encore des paroles que tu sèmes au vent
Voilà mon destin te parler....
Анонимус 17.11.2014 23:45 # +2