Дополнением переменной Salphabet

/* Создать алфавитный массив с ключами от А до Z и значениями от 0 до 25 соответственно */
$alphabet - array_flip(range(’A', ‘£’)); Scryptogram = range(’A', ‘Z’);
/* Случайное тасование поисковой таблицы, используемой для генерации криптограмм */ shuffle(Scryptogram);
Как показано в листинге 2.17, первый шаг, предпринимаемый в этом сценарии — это инициализация генератора случайных чисел. Как и в случае с arrayrand (}, функции shuffle () это необходимо для правильной работы. После этого переменная Smessage (представляющая исходную строку, которую нужно закодировать) инициализируется и преобразуется в верхний регистр с помощью функции strtoupper!). Используя комбинации функций range!) и array^f lip (), создается ассоциативный массив Salphabet, который имеет ключевые значения для каждой буквы алфавита и ассоциирует их с целыми числами от 0 до 25. Дополнением переменной Salphabet служит переменная Scryptrogram, которая инициализируется 26 значениями, представляющими буквы алфавита. Переменная Scryptrogram будет использоваться для кодирования сообщения в окончательной криптограмме.
Когда вся и инициализация завершена, поисковая таблица криптограммы тасуется с помощью описанной ранее функции shuffle!) и начинается кодирование криптограммы, как показано в листинге 2.18.
Листинг 2.18. Генератор криптограмм с применением PHP-массивов (часть 2)
Sencoded « “”;
/* Цикл по всем символам кодируемого сообщения */ for(Si * 0; $i < strlen(Smessage); Si++) ( Schar ■ Smessage[Si];
/* Определение, является ли данный символ кодируемым,
с помощью поиска в таблице Scryptogram */ if (!in_array(Schar, Scryptogram)) (
/* Если символ некодируемый, копировать его без изменений в кодовую
строку */
Sencoded .= Schar; } else |
/* Если символ кодируемый, заменить соответствующим символом из Scryptogram */
Sencoded .= Scryptogram[Salphabet[Schar]];
)
\
echo Sencoded;
Когда вся инициализация завершена, следующим шагом в этом сценарии является организация цикла по индивидуальным символам кодируемого сообщения с помощью оператора for (), начиная с 0 и до значения длины строки, возвращаемого функцией strlen (). Функция strlen () возвращает длину переданной строки (строки подробно обсуждаются в главе 1). Поскольку некоторое количество исходных символов не кодируются (знаки пунктуации, пробелы и тому подобные), нужно проверять каждый символ иа этот предмет. Для этого применяется функция поиска в массиве in_array(), проверяющая наличие данного символа в таблице поиска Scryptogram. Если нет доступной трансляции данного символа (то есть in_array(} возвращает false), он передается в выходную зашифрованную строку Sencoded без изменений. В противном случае символ транслируется иа базе массива Scryptogram. Однако поскольку ключами массива Scryptogram являются не символы, а числа от 0 до 25, массив Salphabet используется для извлечения конкретного целого значения для заданного символа.
После того, как сообщение обработано символ за символом, Sencoded содержит готовую криптограмму сообщения (которая затем отображается клиенту). Так как этот сценарий при каждом запуске генерирует абсолютно новую криптограмму, от него невозможно получить повторяющийся вывод. После запуска этого сценария вывод у автора выглядел так:
DPYM YM RJ МНАХВ MXUBXD RXMMOEX!

Tags: , ,

Related posts


Leave a Reply