|
роке $st безвоз-
вратно теряется. И именно это позволяет нам не опасаться, что злоумышленник,
по-
лучивший файл паролей, сможет его когда-нибудь расшифровать. Ведь в нем нет са-
мих паролей, нет даже их каких-то связных частей!
Алгоритм MD5 специально был изобретен для того, чтобы как раз и обеспечить опи-
санную выше схему. Так как все же есть вероятность того, что у разных строк
MD5-
коды совпадут, то, чтобы не дать возможность злоумышленнику войти в систему,
перебирая пароли с бешеной скоростью, алгоритм MD5 работает довольно медленно.
И его нельзя никак убыстрить, потому что это будет уже не MD5. Так что даже на
самых мощных компьютерах вряд ли получится перебирать более нескольких тысяч
паролей в секунду, а это совсем маленькая скорость, капля в океане возможных
MD5-
кодов.
int crc32(string $str)
Функция crc32() вычисляет 32-битную контрольную сумму строки $str. То есть,
результат ее работы — 32-битное (4-байтовое) целое число. Эта функция работает
гораздо быстрее md5(), но в то же время выдает гораздо менее надежные
"хэш-коды"
для строки. Так что, теперь, чтобы получить методом случайного подбора для двух
разных строк одинаковые "хэш-коды", вам потребуется не триллион лет работы
само-
го мощного компьютера, а всего лишь… год-другой. Впрочем, если не использовать
генератор случайных чисел, а разобраться в алгоритме вычисления 32-битной кон-
Часть IV. Стандартные функции PHP 224
трольной суммы, эту же задачу легко можно решить буквально за секунду, потому
что алгоритм crc32 имеет неизмеримо большую предсказуемость, чем MD5.
string crypt(string $str [,string $salt])
Алгоритм шифрования DES до недавнего времени был стандартным для всех версий
Unix и использовался как раз для кодирования паролей пользователей (тем же
самым
способом, о котором мы говорили при рассмотрении функции md5()). Но в последнее
время MD5 постепенно начал его вытеснять. Это и понятно: MD5 гораздо более на-
дежен. Рекомендую и вам везде применять md5() вместо crypt(). Впрочем, функ-
ция crypt() все же может понадобиться вам в одном случае: если вы хотите сгене-
рировать хэш-код для другой программы, которая использует именно алгоритм DES
(например, для сервера Apache).
Хэш-код для одной и той же строки, но с различными значениями $salt (кстати,
это
должна быть обязательно двухсимвольная строка) дает разные результаты. Если па-
раметр $salt пропущен, PHP сгенерирует его случайным образом, так что не удив-
ляйтесь работе следующего примера:
$st="This is the test";
echo crypt($st)." "; // можем получить, например, 7N8JKLKbBWEhg
echo crypt($st)." "; // а здесь появится, например, Jsk746pawBOA2
Как видите, два одинаковых вызова crypt() без второго параметра выдают совер-
шенно разные хэш-коды. За деталями работы функции обращайтесь к документации
PHP.
Сброс буфера вывода
void flush()
Эта функция имеет очень и очень отдаленное отношение к работе со строками, но
она
еще дальше отстоит от других функций. Именно поэтому я включил ее в данную гла-
ву. Начнем издалека: обычно при использовании echo данные не прямо сразу от-
правляются клиенту, а накапливаются в специальном буфере, чтобы потом транспор-
тироваться большой "пачкой". Так получается быстрее. Однако, иногда бывает
нужно
досрочно отправить все данные из буфера пользователю, например, если вы что-то
выводите в реальном времени (так зачастую работают чаты). Вот тут-то вам и
помо-
жет функция flush(), которая отправляет содержимое буфера echo в браузер поль-
зователя.
Глава 13
Работа с массивами
В части III книги мы уже рассматривали многие возможности, которые предоставля-
ет PHP для работы с ассоциативными массивами. В их число входят различные меха-
низмы перебора, получение числа элементов, оперирование ключами и значениями и
т. д.
Однако здесь перечислено далеко не все, что можно делать с массивами в PHP.
Язык
(особенно версии 4) содержит множество других, иногда крайне полезных, функций.
В этой главе мы рассмотрим большинство из них.
Сортировка массивов
Начнем с самого простого — сортировки массивов. В PHP для этого существует
очень
много функций. С их помощью можно сортировать ассоциативные массивы и списки
в порядке возрастания или убывания, а также в том порядке, в каком
заблагорассу-
дится — посредством пользовательской функции сортировки.
Сортировка
|
|