Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
туры); 
r x — символ с нулевым кодом; 
r X — возврат назад на 1 байт; 
r @ — заполнение нулевым кодом до заданной абсолютной позиции. 
Немало, не правда ли? Вот пример использования этой функции: 

Часть IV. Стандартные функции PHP 222 
// Целое, целое, все остальное — символы 
$bindata = pack("nvc*", 0x1234, 0x5678, 65, 66); 
После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов 

в такой последовательности: 0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в 
шестнадцатерич- 
ной системе счисления). 
array unpack(string $format, string $data) 
Функция unpack() выполняет действия, обратные pack() — распаковывает строку 
$data, пользуясь информацией о формате $format. Возвращает она ассоциативный 
массив, содержащий элементы распакованных данных. Строка $format задается 
немного в другом формате, чем в функции pack(), а именно, после каждого специ- 
фикатора (или после завершающего его числа) должно "впритык" следовать имя 
ключа в ассоциативном массиве. Разделяются параметры при помощи символа /. 
Например: 
$array=unpack("c2chars/nint", $bindata); 
В результирующий массив будут записаны элементы с ключами: chars1, chars2 и 
int. Как видим, если после спецификатора задано число, то к имени ключа будут 
добавлены номера 1, 2 и т. д., т. е. в массиве появятся несколько ключей, 
отличаю- 
щихся суффиксами. 
Когда бывают полезны функции pack() и unpack()? Например, вы считали участок 
GIF-файла, содержащий его размер в пикселах, и хотите преобразовать бинарную 
32- 
битную ячейку памяти в формат, понятный PHP. Или, наоборот, стремитесь работать 

с файлами с фиксированным размером записи. В этом случае вам и пригодятся рас- 
сматриваемые функции. Вообще говоря, функции pack() и unpack() применяются 
сравнительно редко. Это связано с тем, что в PHP практически все действия, 
которые 
могут потребовать работы с бинарными данными (например, анализ файла с рисун- 
ком с целью определения его размера), уже реализованы в виде встроенных функций 

(в нашем примере с GIF-картинкой это GetImageSize()). 
Хэш-функции 
string md5(string $st) 
Возвращает хэш-код строки $st, основанный на алгоритме корпорации RSA Data 
Security под названием "MD5 Message-Digest Algorithm". Хэш-код — это просто 
строка, практически уникальная для каждой из строк $st. То есть вероятность 
того, 
что две разные строки, переданные в $st, дадут нам одинаковый хэш-код, 
стремится 
к нулю. 

Глава 12. Строковые функции 223 
Я где-то читал об одном опыте, в котором принимали участие более 1000 мощ- 
ных компьютеров, на протяжении года генерировавшие хэш-коды для строк, и 
за все время не было обнаружено ни одного совпадения MD5-кодов для раз- 
личных строк. Более того, математически доказано, что они могли бы с тем же 
результатом заниматься этим на протяжении еще нескольких тысяч лет. 
В то же время, если длина строки $st может достигать нескольких тысяч символов, 

то ее MD5-код занимает максимум 32 символа. 
Для чего нужен хэш-код и, в частности, алгоритм MD5? Например, для проверки па- 

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

в обычном виде, или зашифровать их каким-нибудь способом, но тогда велика веро- 

ятность того, что в один прекрасный день этот файл с паролями у вас украдут. 
Если 
пароли были зашифрованы, то, зная метод шифрования, не составит особого труда 
их 
раскодировать. Однако можно поступить другим способом, при использовании кото- 
рого даже если файл с паролями украдут, расшифровать его будет математически 
невозможно. Сделаем так: в файле паролей будем хранить не сами пароли, а их 
(MD5) хэш-коды. При попытке какого-либо пользователя войти в систему мы вычис- 
лим хэш-код только что введенного им пароля и сравним его с тем, который 
записан 
у нас в базе данных. Если коды совпадут, значит, все в порядке, а если нет — 
что ж, 
извините... 
Конечно, при вычислении хэш-кода какая-то часть информации о с
 
<<-[Весь Текст]
Страница: из 287
 <<-